mirror of https://github.com/k3s-io/k3s
Merge remote-tracking branch 'origin/master' into release-1.14. Deleting CHANGELOG-1.11.md CHANGELOG-1.13.md
commit
6e8b574d27
File diff suppressed because it is too large
Load Diff
|
@ -38,6 +38,7 @@ gcs_upload(
|
|||
":_binary-artifacts-and-hashes",
|
||||
"//build/release-tars:release-tars-and-hashes",
|
||||
"//cluster/gce/gci:gcs-release-artifacts-and-hashes",
|
||||
"//cluster/gce/windows:gcs-release-artifacts-and-hashes",
|
||||
],
|
||||
tags = ["manual"],
|
||||
# Use for_platforms to format the upload path based on the configured
|
||||
|
@ -53,6 +54,7 @@ gcs_upload(
|
|||
upload_paths = select(for_platforms(for_all = {
|
||||
"//build/release-tars:release-tars-and-hashes": "",
|
||||
"//cluster/gce/gci:gcs-release-artifacts-and-hashes": "extra/gce",
|
||||
"//cluster/gce/windows:gcs-release-artifacts-and-hashes": "extra/gce/windows",
|
||||
"//:_binary-artifacts-and-hashes": "bin/{OS}/{ARCH}",
|
||||
})),
|
||||
)
|
||||
|
|
|
@ -17,6 +17,7 @@ filegroup(
|
|||
"//cluster/gce/addons:all-srcs",
|
||||
"//cluster/gce/gci:all-srcs",
|
||||
"//cluster/gce/manifests:all-srcs",
|
||||
"//cluster/gce/windows:all-srcs",
|
||||
],
|
||||
tags = ["automanaged"],
|
||||
)
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
load("@io_k8s_repo_infra//defs:build.bzl", "release_filegroup")
|
||||
|
||||
# Having the Windows code from the GCE cluster deploy hosted with the release is
|
||||
# useful for GKE. This list should match the list in k8s.io/release/lib/releaselib.sh.
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
release_filegroup(
|
||||
name = "gcs-release-artifacts",
|
||||
srcs = [
|
||||
"common.psm1",
|
||||
"configure.ps1",
|
||||
"k8s-node-setup.psm1",
|
||||
"testonly/install-ssh.psm1",
|
||||
"testonly/user-profile.psm1",
|
||||
],
|
||||
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"],
|
||||
)
|
|
@ -1,5 +1,11 @@
|
|||
# Starting a Windows Kubernetes cluster on GCE using kube-up
|
||||
|
||||
## IMPORTANT PLEASE NOTE!
|
||||
Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
We HIGHLY recommend not changing the file structure, because consumers of
|
||||
Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
## Bring up the cluster
|
||||
|
||||
Prerequisites: a Google Cloud Platform project.
|
||||
|
@ -185,3 +191,4 @@ These steps are based on
|
|||
user@kubernetes-minion-windows-group-mk0p:C:\\etc\\kubernetes\\logs \
|
||||
kubetest-logs/
|
||||
```
|
||||
|
||||
|
|
|
@ -18,6 +18,12 @@
|
|||
and scripts for configuring Windows nodes.
|
||||
#>
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
# Disable progress bar to increase download speed.
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
|
@ -65,14 +71,13 @@ function ShouldWrite-File {
|
|||
|
||||
# Returns the GCE instance metadata value for $Key. If the key is not present
|
||||
# in the instance metadata returns $Default if set, otherwise returns $null.
|
||||
function Get-InstanceMetadataValue {
|
||||
function Get-InstanceMetadata {
|
||||
param (
|
||||
[parameter(Mandatory=$true)] [string]$Key,
|
||||
[parameter(Mandatory=$false)] [string]$Default
|
||||
)
|
||||
|
||||
$url = ("http://metadata.google.internal/computeMetadata/v1/instance/" +
|
||||
"attributes/$Key")
|
||||
$url = "http://metadata.google.internal/computeMetadata/v1/instance/$Key"
|
||||
try {
|
||||
$client = New-Object Net.WebClient
|
||||
$client.Headers.Add('Metadata-Flavor', 'Google')
|
||||
|
@ -89,6 +94,18 @@ function Get-InstanceMetadataValue {
|
|||
}
|
||||
}
|
||||
|
||||
# Returns the GCE instance metadata value for $Key where key is an "attribute"
|
||||
# of the instance. If the key is not present in the instance metadata returns
|
||||
# $Default if set, otherwise returns $null.
|
||||
function Get-InstanceMetadataAttribute {
|
||||
param (
|
||||
[parameter(Mandatory=$true)] [string]$Key,
|
||||
[parameter(Mandatory=$false)] [string]$Default
|
||||
)
|
||||
|
||||
return Get-InstanceMetadata "attributes/$Key" $Default
|
||||
}
|
||||
|
||||
function Validate-SHA1 {
|
||||
param(
|
||||
[parameter(Mandatory=$true)] [string]$Hash,
|
||||
|
|
|
@ -17,6 +17,12 @@
|
|||
Top-level script that runs on Windows nodes to join them to the K8s cluster.
|
||||
#>
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
# Turn on tracing to debug
|
||||
|
@ -27,9 +33,10 @@ $ErrorActionPreference = 'Stop'
|
|||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
$ProgressPreference = 'SilentlyContinue'
|
||||
|
||||
# Returns the GCE instance metadata value for $Key. If the key is not present
|
||||
# in the instance metadata returns $Default if set, otherwise returns $null.
|
||||
function Get-InstanceMetadataValue {
|
||||
# Returns the GCE instance metadata value for $Key where key is an "attribute"
|
||||
# of the instance. If the key is not present in the instance metadata returns
|
||||
# $Default if set, otherwise returns $null.
|
||||
function Get-InstanceMetadataAttribute {
|
||||
param (
|
||||
[parameter(Mandatory=$true)] [string]$Key,
|
||||
[parameter(Mandatory=$false)] [string]$Default
|
||||
|
@ -63,7 +70,7 @@ function FetchAndImport-ModuleFromMetadata {
|
|||
[parameter(Mandatory=$true)] [string]$Filename
|
||||
)
|
||||
|
||||
$module = Get-InstanceMetadataValue $MetadataKey
|
||||
$module = Get-InstanceMetadataAttribute $MetadataKey
|
||||
if (Test-Path C:\$Filename) {
|
||||
if (-not $REDO_STEPS) {
|
||||
Log-Output "Skip: C:\$Filename already exists, not overwriting"
|
||||
|
@ -81,7 +88,7 @@ try {
|
|||
# Don't use FetchAndImport-ModuleFromMetadata for common.psm1 - the common
|
||||
# module includes variables and functions that any other function may depend
|
||||
# on.
|
||||
$module = Get-InstanceMetadataValue 'common-psm1'
|
||||
$module = Get-InstanceMetadataAttribute 'common-psm1'
|
||||
New-Item -ItemType file -Force C:\common.psm1 | Out-Null
|
||||
Set-Content C:\common.psm1 $module
|
||||
Import-Module -Force C:\common.psm1
|
||||
|
@ -90,6 +97,7 @@ try {
|
|||
# then put these calls into a loop over a list of XYZ-psm1 keys.
|
||||
FetchAndImport-ModuleFromMetadata 'k8s-node-setup-psm1' 'k8s-node-setup.psm1'
|
||||
|
||||
Dump-DebugInfoToConsole
|
||||
Set-PrerequisiteOptions
|
||||
$kube_env = Fetch-KubeEnv
|
||||
Disable-WindowsDefender
|
||||
|
|
|
@ -36,6 +36,12 @@
|
|||
# Execute functions manually or run configure.ps1.
|
||||
#>
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
# TODO: update scripts for these style guidelines:
|
||||
# - Remove {} around variable references unless actually needed for clarity.
|
||||
# - Always use single-quoted strings unless actually interpolating variables
|
||||
|
@ -128,6 +134,19 @@ function Add_GceMetadataServerRoute {
|
|||
}
|
||||
}
|
||||
|
||||
# Writes debugging information, such as Windows version and patch info, to the
|
||||
# console.
|
||||
function Dump-DebugInfoToConsole {
|
||||
Try {
|
||||
$version = "$([System.Environment]::OSVersion.Version | Out-String)"
|
||||
$hotfixes = "$(Get-Hotfix | Out-String)"
|
||||
$image = "$(Get-InstanceMetadata 'image' | Out-String)"
|
||||
Log-Output "Windows version:`n$version"
|
||||
Log-Output "Installed hotfixes:`n$hotfixes"
|
||||
Log-Output "GCE Windows image:`n$image"
|
||||
} Catch { }
|
||||
}
|
||||
|
||||
# Fetches the kube-env from the instance metadata.
|
||||
#
|
||||
# Returns: a PowerShell Hashtable object containing the key-value pairs from
|
||||
|
@ -135,7 +154,7 @@ function Add_GceMetadataServerRoute {
|
|||
function Fetch-KubeEnv {
|
||||
# Testing / debugging:
|
||||
# First:
|
||||
# ${kube_env} = Get-InstanceMetadataValue 'kube-env'
|
||||
# ${kube_env} = Get-InstanceMetadataAttribute 'kube-env'
|
||||
# or:
|
||||
# ${kube_env} = [IO.File]::ReadAllText(".\kubeEnv.txt")
|
||||
# ${kube_env_table} = ConvertFrom-Yaml ${kube_env}
|
||||
|
@ -143,7 +162,7 @@ function Fetch-KubeEnv {
|
|||
# ${kube_env_table}.GetType()
|
||||
|
||||
# The type of kube_env is a powershell String.
|
||||
$kube_env = Get-InstanceMetadataValue 'kube-env'
|
||||
$kube_env = Get-InstanceMetadataAttribute 'kube-env'
|
||||
$kube_env_table = ConvertFrom-Yaml ${kube_env}
|
||||
return ${kube_env_table}
|
||||
}
|
||||
|
@ -882,7 +901,7 @@ function Configure-Kubelet {
|
|||
# The Kubelet config is built by build-kubelet-config() in
|
||||
# cluster/gce/util.sh, and stored in the metadata server under the
|
||||
# 'kubelet-config' key.
|
||||
$kubelet_config = Get-InstanceMetadataValue 'kubelet-config'
|
||||
$kubelet_config = Get-InstanceMetadataAttribute 'kubelet-config'
|
||||
Set-Content ${env:KUBELET_CONFIG} $kubelet_config
|
||||
Log-Output "Kubelet config:`n$(Get-Content -Raw ${env:KUBELET_CONFIG})"
|
||||
}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
# Override this to use a different kubectl binary.
|
||||
kubectl=kubectl
|
||||
linux_deployment_timeout=60
|
||||
windows_deployment_timeout=120
|
||||
windows_deployment_timeout=180
|
||||
output_file=/tmp/k8s-smoke-test.out
|
||||
|
||||
function check_windows_nodes_are_ready {
|
||||
|
|
|
@ -22,6 +22,12 @@
|
|||
clusters. DO NOT USE THIS MODULE FOR PRODUCTION.
|
||||
#>
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
Import-Module -Force C:\common.psm1
|
||||
|
||||
$OPENSSH_ROOT = 'C:\Program Files\OpenSSH'
|
||||
|
@ -106,7 +112,7 @@ function Setup_WriteSshKeysScript {
|
|||
|
||||
# Fetch helper module for manipulating Windows user profiles.
|
||||
if (ShouldWrite-File $USER_PROFILE_MODULE) {
|
||||
$module = Get-InstanceMetadataValue 'user-profile-psm1'
|
||||
$module = Get-InstanceMetadataAttribute 'user-profile-psm1'
|
||||
New-Item -ItemType file -Force $USER_PROFILE_MODULE | Out-Null
|
||||
Set-Content $USER_PROFILE_MODULE $module
|
||||
}
|
||||
|
|
|
@ -19,6 +19,12 @@
|
|||
powershellposse.com
|
||||
#>
|
||||
|
||||
# IMPORTANT PLEASE NOTE:
|
||||
# Any time the file structure in the `windows` directory changes, `windows/BUILD`
|
||||
# and `k8s.io/release/lib/releaselib.sh` must be manually updated with the changes.
|
||||
# We HIGHLY recommend not changing the file structure, because consumers of
|
||||
# Kubernetes releases depend on the release structure remaining stable.
|
||||
|
||||
|
||||
#Function to create the new local user first
|
||||
function New-LocalUser
|
||||
|
|
|
@ -45,6 +45,10 @@ ginkgo_args=(
|
|||
"--noColor=true"
|
||||
)
|
||||
|
||||
if [[ -n ${E2E_DRYRUN:-} ]]; then
|
||||
ginkgo_args+=("--dryRun=true")
|
||||
fi
|
||||
|
||||
case ${E2E_PARALLEL} in
|
||||
'y'|'Y') ginkgo_args+=("--nodes=25") ;;
|
||||
[1-9]|[1-9][0-9]*) ginkgo_args+=("--nodes=${E2E_PARALLEL}") ;;
|
||||
|
|
|
@ -76,7 +76,6 @@ go_library(
|
|||
"//vendor/github.com/go-openapi/spec:go_default_library",
|
||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||
"//vendor/k8s.io/klog:go_default_library",
|
||||
"//vendor/k8s.io/kube-openapi/pkg/common:go_default_library",
|
||||
],
|
||||
)
|
||||
|
||||
|
|
|
@ -60,7 +60,6 @@ import (
|
|||
"k8s.io/klog"
|
||||
aggregatorapiserver "k8s.io/kube-aggregator/pkg/apiserver"
|
||||
aggregatorscheme "k8s.io/kube-aggregator/pkg/apiserver/scheme"
|
||||
openapi "k8s.io/kube-openapi/pkg/common"
|
||||
"k8s.io/kubernetes/cmd/kube-apiserver/app/options"
|
||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||
"k8s.io/kubernetes/pkg/capabilities"
|
||||
|
@ -404,7 +403,6 @@ func buildGenericConfig(
|
|||
}
|
||||
|
||||
genericConfig.OpenAPIConfig = genericapiserver.DefaultOpenAPIConfig(generatedopenapi.GetOpenAPIDefinitions, openapinamer.NewDefinitionNamer(legacyscheme.Scheme, extensionsapiserver.Scheme, aggregatorscheme.Scheme))
|
||||
genericConfig.OpenAPIConfig.PostProcessSpec = postProcessOpenAPISpecForBackwardCompatibility
|
||||
genericConfig.OpenAPIConfig.Info.Title = "Kubernetes"
|
||||
genericConfig.LongRunningFunc = filters.BasicLongRunningRequestCheck(
|
||||
sets.NewString("watch", "proxy"),
|
||||
|
@ -656,347 +654,3 @@ func readCAorNil(file string) ([]byte, error) {
|
|||
}
|
||||
return ioutil.ReadFile(file)
|
||||
}
|
||||
|
||||
// PostProcessSpec adds removed definitions for backward compatibility
|
||||
func postProcessOpenAPISpecForBackwardCompatibility(s *spec.Swagger) (*spec.Swagger, error) {
|
||||
compatibilityMap := map[string]string{
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReview": "io.k8s.api.authorization.v1beta1.SelfSubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.api.v1.GitRepoVolumeSource": "io.k8s.api.core.v1.GitRepoVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ValidatingWebhookConfigurationList": "io.k8s.api.admissionregistration.v1alpha1.ValidatingWebhookConfigurationList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EndpointPort": "io.k8s.api.core.v1.EndpointPort",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SupplementalGroupsStrategyOptions": "io.k8s.api.extensions.v1beta1.SupplementalGroupsStrategyOptions",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodStatus": "io.k8s.api.core.v1.PodStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBindingList": "io.k8s.api.rbac.v1beta1.RoleBindingList",
|
||||
"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetSpec": "io.k8s.api.policy.v1beta1.PodDisruptionBudgetSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.HTTPGetAction": "io.k8s.api.core.v1.HTTPGetAction",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.ResourceAttributes": "io.k8s.api.authorization.v1.ResourceAttributes",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeList": "io.k8s.api.core.v1.PersistentVolumeList",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobSpec": "io.k8s.api.batch.v2alpha1.CronJobSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.CephFSVolumeSource": "io.k8s.api.core.v1.CephFSVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Affinity": "io.k8s.api.core.v1.Affinity",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.PolicyRule": "io.k8s.api.rbac.v1beta1.PolicyRule",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetSpec": "io.k8s.api.extensions.v1beta1.DaemonSetSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource": "io.k8s.api.core.v1.ProjectedVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.TCPSocketAction": "io.k8s.api.core.v1.TCPSocketAction",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSet": "io.k8s.api.extensions.v1beta1.DaemonSet",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressList": "io.k8s.api.extensions.v1beta1.IngressList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodSpec": "io.k8s.api.core.v1.PodSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReview": "io.k8s.api.authentication.v1.TokenReview",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReview": "io.k8s.api.authorization.v1beta1.SubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBinding": "io.k8s.api.rbac.v1alpha1.ClusterRoleBinding",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Node": "io.k8s.api.core.v1.Node",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ServiceReference": "io.k8s.api.admissionregistration.v1alpha1.ServiceReference",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStatus": "io.k8s.api.extensions.v1beta1.DeploymentStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleRef": "io.k8s.api.rbac.v1beta1.RoleRef",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Scale": "io.k8s.api.apps.v1beta1.Scale",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource": "io.k8s.api.core.v1.PhotonPersistentDiskVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm": "io.k8s.api.core.v1.PreferredSchedulingTerm",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v1.JobSpec": "io.k8s.api.batch.v1.JobSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EventSource": "io.k8s.api.core.v1.EventSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Container": "io.k8s.api.core.v1.Container",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.AdmissionHookClientConfig": "io.k8s.api.admissionregistration.v1alpha1.AdmissionHookClientConfig",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceQuota": "io.k8s.api.core.v1.ResourceQuota",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecretList": "io.k8s.api.core.v1.SecretList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeSystemInfo": "io.k8s.api.core.v1.NodeSystemInfo",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.PolicyRule": "io.k8s.api.rbac.v1alpha1.PolicyRule",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetSpec": "io.k8s.api.extensions.v1beta1.ReplicaSetSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeStatus": "io.k8s.api.core.v1.NodeStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaList": "io.k8s.api.core.v1.ResourceQuotaList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.HostPathVolumeSource": "io.k8s.api.core.v1.HostPathVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequest": "io.k8s.api.certificates.v1beta1.CertificateSigningRequest",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressRule": "io.k8s.api.extensions.v1beta1.IngressRule",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPeer": "io.k8s.api.extensions.v1beta1.NetworkPolicyPeer",
|
||||
"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClass": "io.k8s.api.storage.v1.StorageClass",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPeer": "io.k8s.api.networking.v1.NetworkPolicyPeer",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyIngressRule": "io.k8s.api.networking.v1.NetworkPolicyIngressRule",
|
||||
"io.k8s.kubernetes.pkg.api.v1.StorageOSPersistentVolumeSource": "io.k8s.api.core.v1.StorageOSPersistentVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyIngressRule": "io.k8s.api.extensions.v1beta1.NetworkPolicyIngressRule",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodAffinity": "io.k8s.api.core.v1.PodAffinity",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollbackConfig": "io.k8s.api.extensions.v1beta1.RollbackConfig",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodList": "io.k8s.api.core.v1.PodList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleStatus": "io.k8s.api.extensions.v1beta1.ScaleStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ComponentCondition": "io.k8s.api.core.v1.ComponentCondition",
|
||||
"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestList": "io.k8s.api.certificates.v1beta1.CertificateSigningRequestList",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleBindingList": "io.k8s.api.rbac.v1alpha1.ClusterRoleBindingList",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition": "io.k8s.api.autoscaling.v2alpha1.HorizontalPodAutoscalerCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServiceList": "io.k8s.api.core.v1.ServiceList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicy": "io.k8s.api.extensions.v1beta1.PodSecurityPolicy",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v1.JobCondition": "io.k8s.api.batch.v1.JobCondition",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStatus": "io.k8s.api.apps.v1beta1.DeploymentStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Volume": "io.k8s.api.core.v1.Volume",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBindingList": "io.k8s.api.rbac.v1alpha1.RoleBindingList",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Rule": "io.k8s.api.admissionregistration.v1alpha1.Rule",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicy": "io.k8s.api.extensions.v1beta1.NetworkPolicy",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRoleList": "io.k8s.api.rbac.v1alpha1.ClusterRoleList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ObjectFieldSelector": "io.k8s.api.core.v1.ObjectFieldSelector",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EventList": "io.k8s.api.core.v1.EventList",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricStatus": "io.k8s.api.autoscaling.v2alpha1.MetricStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyPort": "io.k8s.api.networking.v1.NetworkPolicyPort",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleList": "io.k8s.api.rbac.v1beta1.RoleList",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleList": "io.k8s.api.rbac.v1alpha1.RoleList",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentStrategy": "io.k8s.api.apps.v1beta1.DeploymentStrategy",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.CrossVersionObjectReference": "io.k8s.api.autoscaling.v1.CrossVersionObjectReference",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMapProjection": "io.k8s.api.core.v1.ConfigMapProjection",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.CrossVersionObjectReference": "io.k8s.api.autoscaling.v2alpha1.CrossVersionObjectReference",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LoadBalancerStatus": "io.k8s.api.core.v1.LoadBalancerStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ISCSIVolumeSource": "io.k8s.api.core.v1.ISCSIVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevisionList": "io.k8s.api.apps.v1beta1.ControllerRevisionList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EndpointSubset": "io.k8s.api.core.v1.EndpointSubset",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SELinuxOptions": "io.k8s.api.core.v1.SELinuxOptions",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimVolumeSource": "io.k8s.api.core.v1.PersistentVolumeClaimVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.MetricSpec": "io.k8s.api.autoscaling.v2alpha1.MetricSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetList": "io.k8s.api.apps.v1beta1.StatefulSetList",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.ResourceAttributes": "io.k8s.api.authorization.v1beta1.ResourceAttributes",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Capabilities": "io.k8s.api.core.v1.Capabilities",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Deployment": "io.k8s.api.extensions.v1beta1.Deployment",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Binding": "io.k8s.api.core.v1.Binding",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerList": "io.k8s.api.core.v1.ReplicationControllerList",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReview": "io.k8s.api.authorization.v1.SelfSubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.UserInfo": "io.k8s.api.authentication.v1beta1.UserInfo",
|
||||
"io.k8s.kubernetes.pkg.api.v1.HostAlias": "io.k8s.api.core.v1.HostAlias",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetUpdateStrategy": "io.k8s.api.apps.v1beta1.StatefulSetUpdateStrategy",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressSpec": "io.k8s.api.extensions.v1beta1.IngressSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentCondition": "io.k8s.api.extensions.v1beta1.DeploymentCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.GCEPersistentDiskVolumeSource": "io.k8s.api.core.v1.GCEPersistentDiskVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Webhook": "io.k8s.api.admissionregistration.v1alpha1.Webhook",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Scale": "io.k8s.api.extensions.v1beta1.Scale",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus": "io.k8s.api.autoscaling.v2alpha1.HorizontalPodAutoscalerStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.FlexVolumeSource": "io.k8s.api.core.v1.FlexVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDeployment": "io.k8s.api.extensions.v1beta1.RollingUpdateDeployment",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricStatus": "io.k8s.api.autoscaling.v2alpha1.ObjectMetricStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Event": "io.k8s.api.core.v1.Event",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaSpec": "io.k8s.api.core.v1.ResourceQuotaSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Handler": "io.k8s.api.core.v1.Handler",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressBackend": "io.k8s.api.extensions.v1beta1.IngressBackend",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Role": "io.k8s.api.rbac.v1alpha1.Role",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ObjectMetricSource": "io.k8s.api.autoscaling.v2alpha1.ObjectMetricSource",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricStatus": "io.k8s.api.autoscaling.v2alpha1.ResourceMetricStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerSpec": "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Lifecycle": "io.k8s.api.core.v1.Lifecycle",
|
||||
"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestStatus": "io.k8s.api.certificates.v1beta1.CertificateSigningRequestStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerStateRunning": "io.k8s.api.core.v1.ContainerStateRunning",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServiceAccountList": "io.k8s.api.core.v1.ServiceAccountList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HostPortRange": "io.k8s.api.extensions.v1beta1.HostPortRange",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ControllerRevision": "io.k8s.api.apps.v1beta1.ControllerRevision",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerSpec": "io.k8s.api.core.v1.ReplicationControllerSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerStateTerminated": "io.k8s.api.core.v1.ContainerStateTerminated",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerStatus": "io.k8s.api.core.v1.ReplicationControllerStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetList": "io.k8s.api.extensions.v1beta1.DaemonSetList",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.SelfSubjectAccessReviewSpec": "io.k8s.api.authorization.v1.SelfSubjectAccessReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ComponentStatusList": "io.k8s.api.core.v1.ComponentStatusList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerStateWaiting": "io.k8s.api.core.v1.ContainerStateWaiting",
|
||||
"io.k8s.kubernetes.pkg.api.v1.VolumeMount": "io.k8s.api.core.v1.VolumeMount",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Secret": "io.k8s.api.core.v1.Secret",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleList": "io.k8s.api.rbac.v1beta1.ClusterRoleList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMapList": "io.k8s.api.core.v1.ConfigMapList",
|
||||
"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClassList": "io.k8s.api.storage.v1beta1.StorageClassList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressPath": "io.k8s.api.extensions.v1beta1.HTTPIngressPath",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.ClusterRole": "io.k8s.api.rbac.v1alpha1.ClusterRole",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.ResourceMetricSource": "io.k8s.api.autoscaling.v2alpha1.ResourceMetricSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentRollback": "io.k8s.api.extensions.v1beta1.DeploymentRollback",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimSpec": "io.k8s.api.core.v1.PersistentVolumeClaimSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ReplicationController": "io.k8s.api.core.v1.ReplicationController",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetSpec": "io.k8s.api.apps.v1beta1.StatefulSetSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecurityContext": "io.k8s.api.core.v1.SecurityContext",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicySpec": "io.k8s.api.networking.v1.NetworkPolicySpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LocalObjectReference": "io.k8s.api.core.v1.LocalObjectReference",
|
||||
"io.k8s.kubernetes.pkg.api.v1.RBDVolumeSource": "io.k8s.api.core.v1.RBDVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicySpec": "io.k8s.api.extensions.v1beta1.NetworkPolicySpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.KeyToPath": "io.k8s.api.core.v1.KeyToPath",
|
||||
"io.k8s.kubernetes.pkg.api.v1.WeightedPodAffinityTerm": "io.k8s.api.core.v1.WeightedPodAffinityTerm",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricStatus": "io.k8s.api.autoscaling.v2alpha1.PodsMetricStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeAddress": "io.k8s.api.core.v1.NodeAddress",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.Ingress": "io.k8s.api.extensions.v1beta1.Ingress",
|
||||
"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudget": "io.k8s.api.policy.v1beta1.PodDisruptionBudget",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServicePort": "io.k8s.api.core.v1.ServicePort",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IDRange": "io.k8s.api.extensions.v1beta1.IDRange",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecretEnvSource": "io.k8s.api.core.v1.SecretEnvSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeSelector": "io.k8s.api.core.v1.NodeSelector",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimStatus": "io.k8s.api.core.v1.PersistentVolumeClaimStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentSpec": "io.k8s.api.apps.v1beta1.DeploymentSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.NonResourceAttributes": "io.k8s.api.authorization.v1.NonResourceAttributes",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleStatus": "io.k8s.api.autoscaling.v1.ScaleStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodCondition": "io.k8s.api.core.v1.PodCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodTemplateSpec": "io.k8s.api.core.v1.PodTemplateSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSet": "io.k8s.api.apps.v1beta1.StatefulSet",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyPort": "io.k8s.api.extensions.v1beta1.NetworkPolicyPort",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReview": "io.k8s.api.authentication.v1beta1.TokenReview",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LimitRangeSpec": "io.k8s.api.core.v1.LimitRangeSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.FlockerVolumeSource": "io.k8s.api.core.v1.FlockerVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.policy.v1beta1.Eviction": "io.k8s.api.policy.v1beta1.Eviction",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaimList": "io.k8s.api.core.v1.PersistentVolumeClaimList",
|
||||
"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestCondition": "io.k8s.api.certificates.v1beta1.CertificateSigningRequestCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeFile": "io.k8s.api.core.v1.DownwardAPIVolumeFile",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.LocalSubjectAccessReview": "io.k8s.api.authorization.v1beta1.LocalSubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleStatus": "io.k8s.api.apps.v1beta1.ScaleStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.HTTPIngressRuleValue": "io.k8s.api.extensions.v1beta1.HTTPIngressRuleValue",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v1.Job": "io.k8s.api.batch.v1.Job",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.ValidatingWebhookConfiguration": "io.k8s.api.admissionregistration.v1alpha1.ValidatingWebhookConfiguration",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.RoleBinding": "io.k8s.api.rbac.v1beta1.RoleBinding",
|
||||
"io.k8s.kubernetes.pkg.api.v1.FCVolumeSource": "io.k8s.api.core.v1.FCVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EndpointAddress": "io.k8s.api.core.v1.EndpointAddress",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerPort": "io.k8s.api.core.v1.ContainerPort",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBinding": "io.k8s.api.rbac.v1beta1.ClusterRoleBinding",
|
||||
"io.k8s.kubernetes.pkg.api.v1.GlusterfsVolumeSource": "io.k8s.api.core.v1.GlusterfsVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceRequirements": "io.k8s.api.core.v1.ResourceRequirements",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateDeployment": "io.k8s.api.apps.v1beta1.RollingUpdateDeployment",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NamespaceStatus": "io.k8s.api.core.v1.NamespaceStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RunAsUserStrategyOptions": "io.k8s.api.extensions.v1beta1.RunAsUserStrategyOptions",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Namespace": "io.k8s.api.core.v1.Namespace",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewSpec": "io.k8s.api.authorization.v1.SubjectAccessReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscaler": "io.k8s.api.autoscaling.v2alpha1.HorizontalPodAutoscaler",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetCondition": "io.k8s.api.extensions.v1beta1.ReplicaSetCondition",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerStatus": "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewStatus": "io.k8s.api.authentication.v1.TokenReviewStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolume": "io.k8s.api.core.v1.PersistentVolume",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.FSGroupStrategyOptions": "io.k8s.api.extensions.v1beta1.FSGroupStrategyOptions",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodSecurityContext": "io.k8s.api.core.v1.PodSecurityContext",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodTemplate": "io.k8s.api.core.v1.PodTemplate",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.LocalSubjectAccessReview": "io.k8s.api.authorization.v1.LocalSubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.api.v1.StorageOSVolumeSource": "io.k8s.api.core.v1.StorageOSVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeSelectorTerm": "io.k8s.api.core.v1.NodeSelectorTerm",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Role": "io.k8s.api.rbac.v1beta1.Role",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerStatus": "io.k8s.api.core.v1.ContainerStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReviewStatus": "io.k8s.api.authorization.v1.SubjectAccessReviewStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1.TokenReviewSpec": "io.k8s.api.authentication.v1.TokenReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMap": "io.k8s.api.core.v1.ConfigMap",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServiceStatus": "io.k8s.api.core.v1.ServiceStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SelfSubjectAccessReviewSpec": "io.k8s.api.authorization.v1beta1.SelfSubjectAccessReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.CinderVolumeSource": "io.k8s.api.core.v1.CinderVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetSpec": "io.k8s.api.settings.v1alpha1.PodPresetSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.NonResourceAttributes": "io.k8s.api.authorization.v1beta1.NonResourceAttributes",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerImage": "io.k8s.api.core.v1.ContainerImage",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ReplicationControllerCondition": "io.k8s.api.core.v1.ReplicationControllerCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EmptyDirVolumeSource": "io.k8s.api.core.v1.EmptyDirVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscalerList": "io.k8s.api.autoscaling.v1.HorizontalPodAutoscalerList",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v1.JobList": "io.k8s.api.batch.v1.JobList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NFSVolumeSource": "io.k8s.api.core.v1.NFSVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Pod": "io.k8s.api.core.v1.Pod",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ObjectReference": "io.k8s.api.core.v1.ObjectReference",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.Deployment": "io.k8s.api.apps.v1beta1.Deployment",
|
||||
"io.k8s.kubernetes.pkg.apis.storage.v1.StorageClassList": "io.k8s.api.storage.v1.StorageClassList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.AttachedVolume": "io.k8s.api.core.v1.AttachedVolume",
|
||||
"io.k8s.kubernetes.pkg.api.v1.AWSElasticBlockStoreVolumeSource": "io.k8s.api.core.v1.AWSElasticBlockStoreVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobList": "io.k8s.api.batch.v2alpha1.CronJobList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentSpec": "io.k8s.api.extensions.v1beta1.DeploymentSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicyList": "io.k8s.api.extensions.v1beta1.PodSecurityPolicyList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodAffinityTerm": "io.k8s.api.core.v1.PodAffinityTerm",
|
||||
"io.k8s.kubernetes.pkg.api.v1.HTTPHeader": "io.k8s.api.core.v1.HTTPHeader",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMapKeySelector": "io.k8s.api.core.v1.ConfigMapKeySelector",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecretKeySelector": "io.k8s.api.core.v1.SecretKeySelector",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentList": "io.k8s.api.extensions.v1beta1.DeploymentList",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1.UserInfo": "io.k8s.api.authentication.v1.UserInfo",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LoadBalancerIngress": "io.k8s.api.core.v1.LoadBalancerIngress",
|
||||
"io.k8s.kubernetes.pkg.api.v1.DaemonEndpoint": "io.k8s.api.core.v1.DaemonEndpoint",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeSelectorRequirement": "io.k8s.api.core.v1.NodeSelectorRequirement",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJobStatus": "io.k8s.api.batch.v2alpha1.CronJobStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.Scale": "io.k8s.api.autoscaling.v1.Scale",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ScaleIOVolumeSource": "io.k8s.api.core.v1.ScaleIOVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodAntiAffinity": "io.k8s.api.core.v1.PodAntiAffinity",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.PodSecurityPolicySpec": "io.k8s.api.extensions.v1beta1.PodSecurityPolicySpec",
|
||||
"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPresetList": "io.k8s.api.settings.v1alpha1.PodPresetList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeAffinity": "io.k8s.api.core.v1.NodeAffinity",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentCondition": "io.k8s.api.apps.v1beta1.DeploymentCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeSpec": "io.k8s.api.core.v1.NodeSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.StatefulSetStatus": "io.k8s.api.apps.v1beta1.StatefulSetStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.RuleWithOperations": "io.k8s.api.admissionregistration.v1alpha1.RuleWithOperations",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressStatus": "io.k8s.api.extensions.v1beta1.IngressStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LimitRangeList": "io.k8s.api.core.v1.LimitRangeList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.AzureDiskVolumeSource": "io.k8s.api.core.v1.AzureDiskVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetStatus": "io.k8s.api.extensions.v1beta1.ReplicaSetStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ComponentStatus": "io.k8s.api.core.v1.ComponentStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.HorizontalPodAutoscaler": "io.k8s.api.autoscaling.v1.HorizontalPodAutoscaler",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicy": "io.k8s.api.networking.v1.NetworkPolicy",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollbackConfig": "io.k8s.api.apps.v1beta1.RollbackConfig",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeCondition": "io.k8s.api.core.v1.NodeCondition",
|
||||
"io.k8s.kubernetes.pkg.api.v1.DownwardAPIProjection": "io.k8s.api.core.v1.DownwardAPIProjection",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.SELinuxStrategyOptions": "io.k8s.api.extensions.v1beta1.SELinuxStrategyOptions",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NamespaceSpec": "io.k8s.api.core.v1.NamespaceSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.certificates.v1beta1.CertificateSigningRequestSpec": "io.k8s.api.certificates.v1beta1.CertificateSigningRequestSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServiceSpec": "io.k8s.api.core.v1.ServiceSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1.SubjectAccessReview": "io.k8s.api.authorization.v1.SubjectAccessReview",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentList": "io.k8s.api.apps.v1beta1.DeploymentList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Toleration": "io.k8s.api.core.v1.Toleration",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.NetworkPolicyList": "io.k8s.api.extensions.v1beta1.NetworkPolicyList",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.PodsMetricSource": "io.k8s.api.autoscaling.v2alpha1.PodsMetricSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EnvFromSource": "io.k8s.api.core.v1.EnvFromSource",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v1.ScaleSpec": "io.k8s.api.autoscaling.v1.ScaleSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PodTemplateList": "io.k8s.api.core.v1.PodTemplateList",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec": "io.k8s.api.autoscaling.v2alpha1.HorizontalPodAutoscalerSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecretProjection": "io.k8s.api.core.v1.SecretProjection",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceFieldSelector": "io.k8s.api.core.v1.ResourceFieldSelector",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeSpec": "io.k8s.api.core.v1.PersistentVolumeSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMapVolumeSource": "io.k8s.api.core.v1.ConfigMapVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.autoscaling.v2alpha1.HorizontalPodAutoscalerList": "io.k8s.api.autoscaling.v2alpha1.HorizontalPodAutoscalerList",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewStatus": "io.k8s.api.authentication.v1beta1.TokenReviewStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.networking.v1.NetworkPolicyList": "io.k8s.api.networking.v1.NetworkPolicyList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Endpoints": "io.k8s.api.core.v1.Endpoints",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LimitRangeItem": "io.k8s.api.core.v1.LimitRangeItem",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ServiceAccount": "io.k8s.api.core.v1.ServiceAccount",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ScaleSpec": "io.k8s.api.extensions.v1beta1.ScaleSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.IngressTLS": "io.k8s.api.extensions.v1beta1.IngressTLS",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.CronJob": "io.k8s.api.batch.v2alpha1.CronJob",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.Subject": "io.k8s.api.rbac.v1alpha1.Subject",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetStatus": "io.k8s.api.extensions.v1beta1.DaemonSetStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetList": "io.k8s.api.policy.v1beta1.PodDisruptionBudgetList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.VsphereVirtualDiskVolumeSource": "io.k8s.api.core.v1.VsphereVirtualDiskVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleRef": "io.k8s.api.rbac.v1alpha1.RoleRef",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource": "io.k8s.api.core.v1.PortworxVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSetList": "io.k8s.api.extensions.v1beta1.ReplicaSetList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.VolumeProjection": "io.k8s.api.core.v1.VolumeProjection",
|
||||
"io.k8s.kubernetes.pkg.apis.storage.v1beta1.StorageClass": "io.k8s.api.storage.v1beta1.StorageClass",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.ReplicaSet": "io.k8s.api.extensions.v1beta1.ReplicaSet",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.DeploymentRollback": "io.k8s.api.apps.v1beta1.DeploymentRollback",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1alpha1.RoleBinding": "io.k8s.api.rbac.v1alpha1.RoleBinding",
|
||||
"io.k8s.kubernetes.pkg.api.v1.AzureFileVolumeSource": "io.k8s.api.core.v1.AzureFileVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.policy.v1beta1.PodDisruptionBudgetStatus": "io.k8s.api.policy.v1beta1.PodDisruptionBudgetStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.authentication.v1beta1.TokenReviewSpec": "io.k8s.api.authentication.v1beta1.TokenReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EndpointsList": "io.k8s.api.core.v1.EndpointsList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ConfigMapEnvSource": "io.k8s.api.core.v1.ConfigMapEnvSource",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v2alpha1.JobTemplateSpec": "io.k8s.api.batch.v2alpha1.JobTemplateSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DaemonSetUpdateStrategy": "io.k8s.api.extensions.v1beta1.DaemonSetUpdateStrategy",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewSpec": "io.k8s.api.authorization.v1beta1.SubjectAccessReviewSpec",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LocalVolumeSource": "io.k8s.api.core.v1.LocalVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ContainerState": "io.k8s.api.core.v1.ContainerState",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Service": "io.k8s.api.core.v1.Service",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ExecAction": "io.k8s.api.core.v1.ExecAction",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Taint": "io.k8s.api.core.v1.Taint",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.Subject": "io.k8s.api.rbac.v1beta1.Subject",
|
||||
"io.k8s.kubernetes.pkg.apis.authorization.v1beta1.SubjectAccessReviewStatus": "io.k8s.api.authorization.v1beta1.SubjectAccessReviewStatus",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRoleBindingList": "io.k8s.api.rbac.v1beta1.ClusterRoleBindingList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.DownwardAPIVolumeSource": "io.k8s.api.core.v1.DownwardAPIVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.apis.batch.v1.JobStatus": "io.k8s.api.batch.v1.JobStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.ResourceQuotaStatus": "io.k8s.api.core.v1.ResourceQuotaStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeStatus": "io.k8s.api.core.v1.PersistentVolumeStatus",
|
||||
"io.k8s.kubernetes.pkg.api.v1.PersistentVolumeClaim": "io.k8s.api.core.v1.PersistentVolumeClaim",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeDaemonEndpoints": "io.k8s.api.core.v1.NodeDaemonEndpoints",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EnvVar": "io.k8s.api.core.v1.EnvVar",
|
||||
"io.k8s.kubernetes.pkg.api.v1.SecretVolumeSource": "io.k8s.api.core.v1.SecretVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.EnvVarSource": "io.k8s.api.core.v1.EnvVarSource",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.RollingUpdateStatefulSetStrategy": "io.k8s.api.apps.v1beta1.RollingUpdateStatefulSetStrategy",
|
||||
"io.k8s.kubernetes.pkg.apis.rbac.v1beta1.ClusterRole": "io.k8s.api.rbac.v1beta1.ClusterRole",
|
||||
"io.k8s.kubernetes.pkg.apis.admissionregistration.v1alpha1.Initializer": "io.k8s.api.admissionregistration.v1alpha1.Initializer",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.DeploymentStrategy": "io.k8s.api.extensions.v1beta1.DeploymentStrategy",
|
||||
"io.k8s.kubernetes.pkg.apis.apps.v1beta1.ScaleSpec": "io.k8s.api.apps.v1beta1.ScaleSpec",
|
||||
"io.k8s.kubernetes.pkg.apis.settings.v1alpha1.PodPreset": "io.k8s.api.settings.v1alpha1.PodPreset",
|
||||
"io.k8s.kubernetes.pkg.api.v1.Probe": "io.k8s.api.core.v1.Probe",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NamespaceList": "io.k8s.api.core.v1.NamespaceList",
|
||||
"io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource": "io.k8s.api.core.v1.QuobyteVolumeSource",
|
||||
"io.k8s.kubernetes.pkg.api.v1.NodeList": "io.k8s.api.core.v1.NodeList",
|
||||
"io.k8s.kubernetes.pkg.apis.extensions.v1beta1.RollingUpdateDaemonSet": "io.k8s.api.extensions.v1beta1.RollingUpdateDaemonSet",
|
||||
"io.k8s.kubernetes.pkg.api.v1.LimitRange": "io.k8s.api.core.v1.LimitRange",
|
||||
}
|
||||
|
||||
for k, v := range compatibilityMap {
|
||||
if _, found := s.Definitions[v]; !found {
|
||||
continue
|
||||
}
|
||||
s.Definitions[k] = spec.Schema{
|
||||
SchemaProps: spec.SchemaProps{
|
||||
Ref: spec.MustCreateRef("#/definitions/" + openapi.EscapeJsonPointer(v)),
|
||||
Description: fmt.Sprintf("Deprecated. Please use %s instead.", v),
|
||||
},
|
||||
}
|
||||
}
|
||||
return s, nil
|
||||
}
|
||||
|
|
|
@ -194,7 +194,7 @@ type APIEndpoint struct {
|
|||
// NodeRegistrationOptions holds fields that relate to registering a new control-plane or node to the cluster, either via "kubeadm init" or "kubeadm join"
|
||||
type NodeRegistrationOptions struct {
|
||||
|
||||
// Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm joiń` operation.
|
||||
// Name is the `.Metadata.Name` field of the Node API object that will be created in this `kubeadm init` or `kubeadm join` operation.
|
||||
// This field is also used in the CommonName field of the kubelet's client certificate to the API server.
|
||||
// Defaults to the hostname of the node if not provided.
|
||||
Name string `json:"name,omitempty"`
|
||||
|
|
|
@ -97,7 +97,7 @@ func runEtcdPhaseLocal() func(c workflow.RunData) error {
|
|||
return errors.Wrap(err, "error creating local etcd static pod manifest file")
|
||||
}
|
||||
} else {
|
||||
klog.V(1).Infof("[etcd] External etcd mode. Skipping the creation of a manifest for local etcd")
|
||||
klog.V(1).Infoln("[etcd] External etcd mode. Skipping the creation of a manifest for local etcd")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -58,7 +58,7 @@ func runKubeletStart(c workflow.RunData) error {
|
|||
// First off, configure the kubelet. In this short timeframe, kubeadm is trying to stop/restart the kubelet
|
||||
// Try to stop the kubelet service so no race conditions occur when configuring it
|
||||
if !data.DryRun() {
|
||||
klog.V(1).Infof("Stopping the kubelet")
|
||||
klog.V(1).Infoln("Stopping the kubelet")
|
||||
kubeletphase.TryStopKubelet()
|
||||
}
|
||||
|
||||
|
@ -76,7 +76,7 @@ func runKubeletStart(c workflow.RunData) error {
|
|||
|
||||
// Try to start the kubelet service in case it's inactive
|
||||
if !data.DryRun() {
|
||||
klog.V(1).Infof("Starting the kubelet")
|
||||
klog.V(1).Infoln("Starting the kubelet")
|
||||
kubeletphase.TryStartKubelet()
|
||||
}
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ func runUploadCerts(c workflow.RunData) error {
|
|||
}
|
||||
|
||||
if !data.UploadCerts() {
|
||||
klog.V(1).Infof("[upload-certs] Skipping certs upload")
|
||||
klog.V(1).Infoln("[upload-certs] Skipping certs upload")
|
||||
return nil
|
||||
}
|
||||
client, err := data.Client()
|
||||
|
|
|
@ -106,7 +106,7 @@ func runUploadKubeadmConfig(c workflow.RunData) error {
|
|||
return err
|
||||
}
|
||||
|
||||
klog.V(1).Infof("[upload-config] Uploading the kubeadm ClusterConfiguration to a ConfigMap")
|
||||
klog.V(1).Infoln("[upload-config] Uploading the kubeadm ClusterConfiguration to a ConfigMap")
|
||||
if err := uploadconfig.UploadConfiguration(cfg, client); err != nil {
|
||||
return errors.Wrap(err, "error uploading the kubeadm ClusterConfiguration")
|
||||
}
|
||||
|
@ -120,12 +120,12 @@ func runUploadKubeletConfig(c workflow.RunData) error {
|
|||
return err
|
||||
}
|
||||
|
||||
klog.V(1).Infof("[upload-config] Uploading the kubelet component config to a ConfigMap")
|
||||
klog.V(1).Infoln("[upload-config] Uploading the kubelet component config to a ConfigMap")
|
||||
if err = kubeletphase.CreateConfigMap(cfg.ClusterConfiguration.ComponentConfigs.Kubelet, cfg.KubernetesVersion, client); err != nil {
|
||||
return errors.Wrap(err, "error creating kubelet configuration ConfigMap")
|
||||
}
|
||||
|
||||
klog.V(1).Infof("[upload-config] Preserving the CRISocket information for the control-plane node")
|
||||
klog.V(1).Infoln("[upload-config] Preserving the CRISocket information for the control-plane node")
|
||||
if err := patchnodephase.AnnotateCRISocket(client, cfg.NodeRegistration.Name, cfg.NodeRegistration.CRISocket); err != nil {
|
||||
return errors.Wrap(err, "Error writing Crisocket information for the control-plane node")
|
||||
}
|
||||
|
|
|
@ -77,7 +77,7 @@ func runWaitControlPlanePhase(c workflow.RunData) error {
|
|||
}
|
||||
|
||||
// waiter holds the apiclient.Waiter implementation of choice, responsible for querying the API server in various ways and waiting for conditions to be fulfilled
|
||||
klog.V(1).Infof("[wait-control-plane] Waiting for the API server to be healthy")
|
||||
klog.V(1).Infoln("[wait-control-plane] Waiting for the API server to be healthy")
|
||||
|
||||
client, err := data.Client()
|
||||
if err != nil {
|
||||
|
|
|
@ -44,10 +44,12 @@ func getControlPlaneJoinPhaseFlags() []string {
|
|||
options.CfgPath,
|
||||
options.ControlPlane,
|
||||
options.NodeName,
|
||||
options.FileDiscovery,
|
||||
options.TokenDiscovery,
|
||||
options.TokenDiscoveryCAHash,
|
||||
options.TokenDiscoverySkipCAHash,
|
||||
options.KubeconfigPath,
|
||||
options.TLSBootstrapToken,
|
||||
options.TokenStr,
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -41,9 +41,11 @@ func NewControlPlanePreparePhase() workflow.Phase {
|
|||
Short: "Prepares the machine for serving a control plane.",
|
||||
Phases: []workflow.Phase{
|
||||
{
|
||||
Name: "all",
|
||||
Short: "Prepares the machine for serving a control plane.",
|
||||
InheritFlags: getControlPlanePreparePhaseFlags(),
|
||||
Name: "all",
|
||||
Short: "Prepares the machine for serving a control plane.",
|
||||
InheritFlags: append(getControlPlanePreparePhaseFlags(),
|
||||
options.CertificateKey,
|
||||
),
|
||||
RunAllSiblings: true,
|
||||
},
|
||||
newControlPlanePrepareDownloadCertsSubphase(),
|
||||
|
@ -61,10 +63,12 @@ func getControlPlanePreparePhaseFlags() []string {
|
|||
options.CfgPath,
|
||||
options.ControlPlane,
|
||||
options.NodeName,
|
||||
options.FileDiscovery,
|
||||
options.TokenDiscovery,
|
||||
options.TokenDiscoveryCAHash,
|
||||
options.TokenDiscoverySkipCAHash,
|
||||
options.CertificateKey,
|
||||
options.TLSBootstrapToken,
|
||||
options.TokenStr,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -74,10 +78,9 @@ func newControlPlanePrepareDownloadCertsSubphase() workflow.Phase {
|
|||
Short: fmt.Sprintf("Download certificates from %s", kubeadmconstants.KubeadmCertsSecret),
|
||||
Long: cmdutil.MacroCommandLongDescription,
|
||||
Run: runControlPlanePrepareDownloadCertsPhaseLocal,
|
||||
InheritFlags: []string{
|
||||
options.CfgPath,
|
||||
InheritFlags: append(getControlPlanePreparePhaseFlags(),
|
||||
options.CertificateKey,
|
||||
},
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -64,10 +64,11 @@ func NewKubeletStartPhase() workflow.Phase {
|
|||
options.CfgPath,
|
||||
options.NodeCRISocket,
|
||||
options.NodeName,
|
||||
options.TLSBootstrapToken,
|
||||
options.FileDiscovery,
|
||||
options.TokenDiscovery,
|
||||
options.TokenDiscoveryCAHash,
|
||||
options.TokenDiscoverySkipCAHash,
|
||||
options.TLSBootstrapToken,
|
||||
options.TokenStr,
|
||||
},
|
||||
}
|
||||
|
@ -126,7 +127,7 @@ func runKubeletStartJoinPhase(c workflow.RunData) error {
|
|||
|
||||
// Configure the kubelet. In this short timeframe, kubeadm is trying to stop/restart the kubelet
|
||||
// Try to stop the kubelet service so no race conditions occur when configuring it
|
||||
klog.V(1).Infof("[kubelet-start] Stopping the kubelet")
|
||||
klog.V(1).Infoln("[kubelet-start] Stopping the kubelet")
|
||||
kubeletphase.TryStopKubelet()
|
||||
|
||||
// Write the configuration for the kubelet (using the bootstrap token credentials) to disk so the kubelet can start
|
||||
|
@ -143,7 +144,7 @@ func runKubeletStartJoinPhase(c workflow.RunData) error {
|
|||
}
|
||||
|
||||
// Try to start the kubelet service in case it's inactive
|
||||
klog.V(1).Infof("[kubelet-start] Starting the kubelet")
|
||||
klog.V(1).Infoln("[kubelet-start] Starting the kubelet")
|
||||
kubeletphase.TryStartKubelet()
|
||||
|
||||
// Now the kubelet will perform the TLS Bootstrap, transforming /etc/kubernetes/bootstrap-kubelet.conf to /etc/kubernetes/kubelet.conf
|
||||
|
@ -161,7 +162,7 @@ func runKubeletStartJoinPhase(c workflow.RunData) error {
|
|||
return err
|
||||
}
|
||||
|
||||
klog.V(1).Infof("[kubelet-start] preserving the crisocket information for the node")
|
||||
klog.V(1).Infoln("[kubelet-start] preserving the crisocket information for the node")
|
||||
if err := patchnodephase.AnnotateCRISocket(client, cfg.NodeRegistration.Name, cfg.NodeRegistration.CRISocket); err != nil {
|
||||
return errors.Wrap(err, "error uploading crisocket")
|
||||
}
|
||||
|
|
|
@ -73,6 +73,7 @@ func NewPreflightPhase() workflow.Phase {
|
|||
options.TokenDiscovery,
|
||||
options.TokenDiscoveryCAHash,
|
||||
options.TokenDiscoverySkipCAHash,
|
||||
options.CertificateKey,
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@ func (r *Reset) Run(out io.Writer, client clientset.Interface, cfg *kubeadmapi.I
|
|||
// Only clear etcd data when using local etcd.
|
||||
etcdManifestPath := filepath.Join(kubeadmconstants.KubernetesDir, kubeadmconstants.ManifestsSubDirName, "etcd.yaml")
|
||||
|
||||
klog.V(1).Infof("[reset] checking for etcd config")
|
||||
klog.V(1).Infoln("[reset] checking for etcd config")
|
||||
etcdDataDir, err := getEtcdDataDir(etcdManifestPath, cfg)
|
||||
if err == nil {
|
||||
dirsToClean = append(dirsToClean, etcdDataDir)
|
||||
|
@ -157,7 +157,7 @@ func (r *Reset) Run(out io.Writer, client clientset.Interface, cfg *kubeadmapi.I
|
|||
}
|
||||
|
||||
// Try to stop the kubelet service
|
||||
klog.V(1).Infof("[reset] getting init system")
|
||||
klog.V(1).Infoln("[reset] getting init system")
|
||||
initSystem, err := initsystem.GetInitSystem()
|
||||
if err != nil {
|
||||
klog.Warningln("[reset] the kubelet service could not be stopped by kubeadm. Unable to detect a supported init system!")
|
||||
|
|
|
@ -27,7 +27,6 @@ import (
|
|||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/klog"
|
||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
|
@ -76,39 +75,7 @@ func NewCmdApply(apf *applyPlanFlags) *cobra.Command {
|
|||
DisableFlagsInUseLine: true,
|
||||
Short: "Upgrade your Kubernetes cluster to the specified version.",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
var userVersion string
|
||||
var err error
|
||||
flags.ignorePreflightErrorsSet, err = validation.ValidateIgnorePreflightErrors(flags.ignorePreflightErrors)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
// Ensure the user is root
|
||||
klog.V(1).Infof("running preflight checks")
|
||||
err = runPreflightChecks(flags.ignorePreflightErrorsSet)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
// If the version is specified in config file, pick up that value.
|
||||
if flags.cfgPath != "" {
|
||||
// Note that cfg isn't preserved here, it's just an one-off to populate userVersion based on --config
|
||||
cfg, err := configutil.LoadInitConfigurationFromFile(flags.cfgPath)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
if cfg.KubernetesVersion != "" {
|
||||
userVersion = cfg.KubernetesVersion
|
||||
}
|
||||
}
|
||||
|
||||
// If the new version is already specified in config file, version arg is optional.
|
||||
if userVersion == "" {
|
||||
err = cmdutil.ValidateExactArgNumber(args, []string{"version"})
|
||||
kubeadmutil.CheckErr(err)
|
||||
}
|
||||
|
||||
// If option was specified in both args and config file, args will overwrite the config file.
|
||||
if len(args) == 1 {
|
||||
userVersion = args[0]
|
||||
}
|
||||
|
||||
err = assertVersionStringIsEmpty(userVersion)
|
||||
userVersion, err := getK8sVersionFromUserInput(flags.applyPlanFlags, args, true)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
err = runApply(flags, userVersion)
|
||||
|
@ -147,8 +114,8 @@ func NewCmdApply(apf *applyPlanFlags) *cobra.Command {
|
|||
func runApply(flags *applyFlags, userVersion string) error {
|
||||
|
||||
// Start with the basics, verify that the cluster is healthy and get the configuration from the cluster (using the ConfigMap)
|
||||
klog.V(1).Infof("[upgrade/apply] verifying health of cluster")
|
||||
klog.V(1).Infof("[upgrade/apply] retrieving configuration from cluster")
|
||||
klog.V(1).Infoln("[upgrade/apply] verifying health of cluster")
|
||||
klog.V(1).Infoln("[upgrade/apply] retrieving configuration from cluster")
|
||||
client, versionGetter, cfg, err := enforceRequirements(flags.applyPlanFlags, flags.dryRun, userVersion)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -160,7 +127,7 @@ func runApply(flags *applyFlags, userVersion string) error {
|
|||
}
|
||||
|
||||
// Validate requested and validate actual version
|
||||
klog.V(1).Infof("[upgrade/apply] validating requested and actual version")
|
||||
klog.V(1).Infoln("[upgrade/apply] validating requested and actual version")
|
||||
if err := configutil.NormalizeKubernetesVersion(&cfg.ClusterConfiguration); err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -176,7 +143,7 @@ func runApply(flags *applyFlags, userVersion string) error {
|
|||
}
|
||||
|
||||
// Enforce the version skew policies
|
||||
klog.V(1).Infof("[upgrade/version] enforcing version skew policies")
|
||||
klog.V(1).Infoln("[upgrade/version] enforcing version skew policies")
|
||||
if err := EnforceVersionPolicies(cfg.KubernetesVersion, newK8sVersion, flags, versionGetter); err != nil {
|
||||
return errors.Wrap(err, "[upgrade/version] FATAL")
|
||||
}
|
||||
|
@ -192,7 +159,7 @@ func runApply(flags *applyFlags, userVersion string) error {
|
|||
|
||||
// Use a prepuller implementation based on creating DaemonSets
|
||||
// and block until all DaemonSets are ready; then we know for sure that all control plane images are cached locally
|
||||
klog.V(1).Infof("[upgrade/apply] creating prepuller")
|
||||
klog.V(1).Infoln("[upgrade/apply] creating prepuller")
|
||||
prepuller := upgrade.NewDaemonSetPrepuller(client, waiter, &cfg.ClusterConfiguration)
|
||||
componentsToPrepull := constants.ControlPlaneComponents
|
||||
if cfg.Etcd.External == nil && flags.etcdUpgrade {
|
||||
|
@ -203,13 +170,13 @@ func runApply(flags *applyFlags, userVersion string) error {
|
|||
}
|
||||
|
||||
// Now; perform the upgrade procedure
|
||||
klog.V(1).Infof("[upgrade/apply] performing upgrade")
|
||||
klog.V(1).Infoln("[upgrade/apply] performing upgrade")
|
||||
if err := PerformControlPlaneUpgrade(flags, client, waiter, cfg); err != nil {
|
||||
return errors.Wrap(err, "[upgrade/apply] FATAL")
|
||||
}
|
||||
|
||||
// Upgrade RBAC rules and addons.
|
||||
klog.V(1).Infof("[upgrade/postupgrade] upgrading RBAC rules and addons")
|
||||
klog.V(1).Infoln("[upgrade/postupgrade] upgrading RBAC rules and addons")
|
||||
if err := upgrade.PerformPostUpgradeTasks(client, cfg, newK8sVersion, flags.dryRun); err != nil {
|
||||
return errors.Wrap(err, "[upgrade/postupgrade] FATAL post-upgrade error")
|
||||
}
|
||||
|
@ -227,14 +194,6 @@ func runApply(flags *applyFlags, userVersion string) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func assertVersionStringIsEmpty(version string) error {
|
||||
if len(version) == 0 {
|
||||
return errors.New("version string can't be empty")
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// EnforceVersionPolicies makes sure that the version the user specified is valid to upgrade to
|
||||
// There are both fatal and skippable (with --force) errors
|
||||
func EnforceVersionPolicies(newK8sVersionStr string, newK8sVersion *version.Version, flags *applyFlags, versionGetter upgrade.VersionGetter) error {
|
||||
|
|
|
@ -25,30 +25,6 @@ import (
|
|||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
)
|
||||
|
||||
func TestAssertVersionStringIsEmpty(t *testing.T) {
|
||||
var tcases = []struct {
|
||||
name string
|
||||
version string
|
||||
expectedErr bool
|
||||
}{
|
||||
{
|
||||
name: "Version string is not empty",
|
||||
version: "some string",
|
||||
},
|
||||
{
|
||||
name: "Version string is empty",
|
||||
expectedErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tcases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
if assertVersionStringIsEmpty(tt.version) == nil && tt.expectedErr {
|
||||
t.Errorf("No error triggered for string '%s'", tt.version)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSessionIsInteractive(t *testing.T) {
|
||||
var tcases = []struct {
|
||||
name string
|
||||
|
|
|
@ -31,7 +31,10 @@ import (
|
|||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
fakediscovery "k8s.io/client-go/discovery/fake"
|
||||
clientset "k8s.io/client-go/kubernetes"
|
||||
"k8s.io/klog"
|
||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/features"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/upgrade"
|
||||
|
@ -42,8 +45,47 @@ import (
|
|||
kubeconfigutil "k8s.io/kubernetes/cmd/kubeadm/app/util/kubeconfig"
|
||||
)
|
||||
|
||||
func getK8sVersionFromUserInput(flags *applyPlanFlags, args []string, versionIsMandatory bool) (string, error) {
|
||||
var userVersion string
|
||||
|
||||
// If the version is specified in config file, pick up that value.
|
||||
if flags.cfgPath != "" {
|
||||
// Note that cfg isn't preserved here, it's just an one-off to populate userVersion based on --config
|
||||
cfg, err := configutil.LoadInitConfigurationFromFile(flags.cfgPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
userVersion = cfg.KubernetesVersion
|
||||
}
|
||||
|
||||
// the version arg is mandatory unless version is specified in the config file
|
||||
if versionIsMandatory && userVersion == "" {
|
||||
if err := cmdutil.ValidateExactArgNumber(args, []string{"version"}); err != nil {
|
||||
return "", err
|
||||
}
|
||||
}
|
||||
|
||||
// If option was specified in both args and config file, args will overwrite the config file.
|
||||
if len(args) == 1 {
|
||||
userVersion = args[0]
|
||||
}
|
||||
|
||||
return userVersion, nil
|
||||
}
|
||||
|
||||
// enforceRequirements verifies that it's okay to upgrade and then returns the variables needed for the rest of the procedure
|
||||
func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion string) (clientset.Interface, upgrade.VersionGetter, *kubeadmapi.InitConfiguration, error) {
|
||||
ignorePreflightErrorsSet, err := validation.ValidateIgnorePreflightErrors(flags.ignorePreflightErrors)
|
||||
if err != nil {
|
||||
return nil, nil, nil, err
|
||||
}
|
||||
|
||||
// Ensure the user is root
|
||||
klog.V(1).Info("running preflight checks")
|
||||
if err := runPreflightChecks(ignorePreflightErrorsSet); err != nil {
|
||||
return nil, nil, nil, err
|
||||
}
|
||||
|
||||
client, err := getClient(flags.kubeConfigPath, dryRun)
|
||||
if err != nil {
|
||||
|
@ -56,7 +98,7 @@ func enforceRequirements(flags *applyPlanFlags, dryRun bool, newK8sVersion strin
|
|||
}
|
||||
|
||||
// Run healthchecks against the cluster
|
||||
if err := upgrade.CheckClusterHealth(client, flags.ignorePreflightErrorsSet); err != nil {
|
||||
if err := upgrade.CheckClusterHealth(client, ignorePreflightErrorsSet); err != nil {
|
||||
return nil, nil, nil, errors.Wrap(err, "[upgrade/health] FATAL")
|
||||
}
|
||||
|
||||
|
|
|
@ -18,11 +18,134 @@ package upgrade
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
)
|
||||
|
||||
const (
|
||||
validConfig = `apiVersion: kubeadm.k8s.io/v1beta1
|
||||
kind: ClusterConfiguration
|
||||
kubernetesVersion: 1.13.0
|
||||
`
|
||||
)
|
||||
|
||||
func TestGetK8sVersionFromUserInput(t *testing.T) {
|
||||
var tcases = []struct {
|
||||
name string
|
||||
isVersionMandatory bool
|
||||
clusterConfig string
|
||||
args []string
|
||||
expectedErr bool
|
||||
expectedVersion string
|
||||
}{
|
||||
{
|
||||
name: "No config and version as an argument",
|
||||
isVersionMandatory: true,
|
||||
args: []string{"v1.13.1"},
|
||||
expectedVersion: "v1.13.1",
|
||||
},
|
||||
{
|
||||
name: "Neither config nor version specified",
|
||||
isVersionMandatory: true,
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "No config and empty version as an argument",
|
||||
isVersionMandatory: true,
|
||||
args: []string{""},
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "Valid config, but no version specified",
|
||||
isVersionMandatory: true,
|
||||
clusterConfig: validConfig,
|
||||
expectedVersion: "v1.13.0",
|
||||
},
|
||||
{
|
||||
name: "Valid config and different version specified",
|
||||
isVersionMandatory: true,
|
||||
clusterConfig: validConfig,
|
||||
args: []string{"v1.13.1"},
|
||||
expectedVersion: "v1.13.1",
|
||||
},
|
||||
{
|
||||
name: "Version is optional",
|
||||
},
|
||||
}
|
||||
for tnum, tt := range tcases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
flags := &applyPlanFlags{}
|
||||
if len(tt.clusterConfig) > 0 {
|
||||
tmpfile := fmt.Sprintf("/tmp/kubeadm-upgrade-common-test-%d-%d.yaml", tnum, time.Now().Unix())
|
||||
if err := ioutil.WriteFile(tmpfile, []byte(tt.clusterConfig), 0666); err != nil {
|
||||
t.Fatalf("Failed to create test config file: %+v", err)
|
||||
}
|
||||
defer os.Remove(tmpfile)
|
||||
|
||||
flags.cfgPath = tmpfile
|
||||
}
|
||||
|
||||
userVersion, err := getK8sVersionFromUserInput(flags, tt.args, tt.isVersionMandatory)
|
||||
|
||||
if err == nil && tt.expectedErr {
|
||||
t.Error("Expected error, but got success")
|
||||
}
|
||||
if err != nil && !tt.expectedErr {
|
||||
t.Errorf("Unexpected error: %+v", err)
|
||||
}
|
||||
if userVersion != tt.expectedVersion {
|
||||
t.Errorf("Expected '%s', but got '%s'", tt.expectedVersion, userVersion)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnforceRequirements(t *testing.T) {
|
||||
tcases := []struct {
|
||||
name string
|
||||
newK8sVersion string
|
||||
dryRun bool
|
||||
flags applyPlanFlags
|
||||
expectedErr bool
|
||||
}{
|
||||
{
|
||||
name: "Fail pre-flight check",
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "Bogus preflight check disabled when also 'all' is specified",
|
||||
flags: applyPlanFlags{
|
||||
ignorePreflightErrors: []string{"bogusvalue", "all"},
|
||||
},
|
||||
expectedErr: true,
|
||||
},
|
||||
{
|
||||
name: "Fail to create client",
|
||||
flags: applyPlanFlags{
|
||||
ignorePreflightErrors: []string{"all"},
|
||||
},
|
||||
expectedErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tcases {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
_, _, _, err := enforceRequirements(&tt.flags, tt.dryRun, tt.newK8sVersion)
|
||||
|
||||
if err == nil && tt.expectedErr {
|
||||
t.Error("Expected error, but got success")
|
||||
}
|
||||
if err != nil && !tt.expectedErr {
|
||||
t.Errorf("Unexpected error: %+v", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestPrintConfiguration(t *testing.T) {
|
||||
var tests = []struct {
|
||||
name string
|
||||
|
|
|
@ -29,10 +29,8 @@ import (
|
|||
"k8s.io/apimachinery/pkg/util/version"
|
||||
"k8s.io/klog"
|
||||
kubeadmapi "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/validation"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/phases/upgrade"
|
||||
kubeadmutil "k8s.io/kubernetes/cmd/kubeadm/app/util"
|
||||
configutil "k8s.io/kubernetes/cmd/kubeadm/app/util/config"
|
||||
etcdutil "k8s.io/kubernetes/cmd/kubeadm/app/util/etcd"
|
||||
)
|
||||
|
||||
|
@ -50,27 +48,8 @@ func NewCmdPlan(apf *applyPlanFlags) *cobra.Command {
|
|||
Use: "plan [version] [flags]",
|
||||
Short: "Check which versions are available to upgrade to and validate whether your current cluster is upgradeable. To skip the internet check, pass in the optional [version] parameter.",
|
||||
Run: func(_ *cobra.Command, args []string) {
|
||||
var userVersion string
|
||||
var err error
|
||||
flags.ignorePreflightErrorsSet, err = validation.ValidateIgnorePreflightErrors(flags.ignorePreflightErrors)
|
||||
userVersion, err := getK8sVersionFromUserInput(flags.applyPlanFlags, args, false)
|
||||
kubeadmutil.CheckErr(err)
|
||||
// Ensure the user is root
|
||||
err = runPreflightChecks(flags.ignorePreflightErrorsSet)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
// If the version is specified in config file, pick up that value.
|
||||
if flags.cfgPath != "" {
|
||||
cfg, err := configutil.LoadInitConfigurationFromFile(flags.cfgPath)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
||||
if cfg.KubernetesVersion != "" {
|
||||
userVersion = cfg.KubernetesVersion
|
||||
}
|
||||
}
|
||||
// If option was specified in both args and config file, args will overwrite the config file.
|
||||
if len(args) == 1 {
|
||||
userVersion = args[0]
|
||||
}
|
||||
|
||||
err = runPlan(flags, userVersion)
|
||||
kubeadmutil.CheckErr(err)
|
||||
|
@ -85,8 +64,8 @@ func NewCmdPlan(apf *applyPlanFlags) *cobra.Command {
|
|||
// runPlan takes care of outputting available versions to upgrade to for the user
|
||||
func runPlan(flags *planFlags, userVersion string) error {
|
||||
// Start with the basics, verify that the cluster is healthy, build a client and a versionGetter. Never dry-run when planning.
|
||||
klog.V(1).Infof("[upgrade/plan] verifying health of cluster")
|
||||
klog.V(1).Infof("[upgrade/plan] retrieving configuration from cluster")
|
||||
klog.V(1).Infoln("[upgrade/plan] verifying health of cluster")
|
||||
klog.V(1).Infoln("[upgrade/plan] retrieving configuration from cluster")
|
||||
client, versionGetter, cfg, err := enforceRequirements(flags.applyPlanFlags, false, userVersion)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -112,7 +91,7 @@ func runPlan(flags *planFlags, userVersion string) error {
|
|||
}
|
||||
|
||||
// Compute which upgrade possibilities there are
|
||||
klog.V(1).Infof("[upgrade/plan] computing upgrade possibilities")
|
||||
klog.V(1).Infoln("[upgrade/plan] computing upgrade possibilities")
|
||||
availUpgrades, err := upgrade.GetAvailableUpgrades(versionGetter, flags.allowExperimentalUpgrades, flags.allowRCUpgrades, etcdClient, cfg.DNS.Type, client)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "[upgrade/versions] FATAL")
|
||||
|
|
|
@ -23,7 +23,6 @@ import (
|
|||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
|
||||
"k8s.io/apimachinery/pkg/util/sets"
|
||||
"k8s.io/kubernetes/cmd/kubeadm/app/cmd/options"
|
||||
cmdutil "k8s.io/kubernetes/cmd/kubeadm/app/cmd/util"
|
||||
kubeadmconstants "k8s.io/kubernetes/cmd/kubeadm/app/constants"
|
||||
|
@ -39,7 +38,6 @@ type applyPlanFlags struct {
|
|||
allowRCUpgrades bool
|
||||
printConfig bool
|
||||
ignorePreflightErrors []string
|
||||
ignorePreflightErrorsSet sets.String
|
||||
out io.Writer
|
||||
}
|
||||
|
||||
|
@ -52,7 +50,6 @@ func NewCmdUpgrade(out io.Writer) *cobra.Command {
|
|||
allowExperimentalUpgrades: false,
|
||||
allowRCUpgrades: false,
|
||||
printConfig: false,
|
||||
ignorePreflightErrorsSet: sets.NewString(),
|
||||
out: out,
|
||||
}
|
||||
|
||||
|
|
|
@ -409,7 +409,7 @@ func (HostnameCheck) Name() string {
|
|||
|
||||
// Check validates if hostname match dns sub domain regex.
|
||||
func (hc HostnameCheck) Check() (warnings, errorList []error) {
|
||||
klog.V(1).Infof("checking whether the given node name is reachable using net.LookupHost")
|
||||
klog.V(1).Infoln("checking whether the given node name is reachable using net.LookupHost")
|
||||
errorList = []error{}
|
||||
warnings = []error{}
|
||||
addr, err := net.LookupHost(hc.nodeName)
|
||||
|
@ -436,7 +436,7 @@ func (hst HTTPProxyCheck) Name() string {
|
|||
|
||||
// Check validates http connectivity type, direct or via proxy.
|
||||
func (hst HTTPProxyCheck) Check() (warnings, errorList []error) {
|
||||
klog.V(1).Infof("validating if the connectivity type is via proxy or direct")
|
||||
klog.V(1).Infoln("validating if the connectivity type is via proxy or direct")
|
||||
u := (&url.URL{Scheme: hst.Proto, Host: hst.Host}).String()
|
||||
|
||||
req, err := http.NewRequest("GET", u, nil)
|
||||
|
|
|
@ -818,6 +818,9 @@ EOF
|
|||
--config=/tmp/kube-proxy.yaml \
|
||||
--master="https://${API_HOST}:${API_SECURE_PORT}" >"${PROXY_LOG}" 2>&1 &
|
||||
PROXY_PID=$!
|
||||
}
|
||||
|
||||
function start_kubescheduler {
|
||||
|
||||
SCHEDULER_LOG=${LOG_DIR}/kube-scheduler.log
|
||||
${CONTROLPLANE_SUDO} "${GO_OUT}/hyperkube" scheduler \
|
||||
|
@ -1012,6 +1015,7 @@ if [[ "${START_MODE}" != "kubeletonly" ]]; then
|
|||
start_cloud_controller_manager
|
||||
fi
|
||||
start_kubeproxy
|
||||
start_kubescheduler
|
||||
start_kubedns
|
||||
if [[ "${ENABLE_NODELOCAL_DNS:-}" == "true" ]]; then
|
||||
start_nodelocaldns
|
||||
|
|
|
@ -62,6 +62,7 @@ go_library(
|
|||
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
||||
"//staging/src/k8s.io/cloud-provider/volume/errors:go_default_library",
|
||||
"//staging/src/k8s.io/csi-api/pkg/client/clientset/versioned:go_default_library",
|
||||
"//staging/src/k8s.io/csi-translation-lib:go_default_library",
|
||||
"//vendor/github.com/prometheus/client_golang/prometheus:go_default_library",
|
||||
"//vendor/k8s.io/klog:go_default_library",
|
||||
],
|
||||
|
|
|
@ -988,6 +988,22 @@ func wrapTestWithProvisionCalls(expectedProvisionCalls []provisionCall, toWrap t
|
|||
return wrapTestWithPluginCalls(nil, nil, expectedProvisionCalls, toWrap)
|
||||
}
|
||||
|
||||
// wrapTestWithCSIMigrationProvisionCalls returns a testCall that:
|
||||
// - configures controller with a volume plugin that emulates CSI migration
|
||||
// - calls given testCall
|
||||
func wrapTestWithCSIMigrationProvisionCalls(toWrap testCall) testCall {
|
||||
return func(ctrl *PersistentVolumeController, reactor *volumeReactor, test controllerTest) error {
|
||||
plugin := &mockVolumePlugin{
|
||||
isMigratedToCSI: true,
|
||||
}
|
||||
ctrl.volumePluginMgr.InitPlugins([]vol.VolumePlugin{plugin}, nil /* prober */, ctrl)
|
||||
ctrl.csiNameFromIntreeNameHook = func(string) (string, error) {
|
||||
return "vendor.com/MockCSIPlugin", nil
|
||||
}
|
||||
return toWrap(ctrl, reactor, test)
|
||||
}
|
||||
}
|
||||
|
||||
// wrapTestWithInjectedOperation returns a testCall that:
|
||||
// - starts the controller and lets it run original testCall until
|
||||
// scheduleOperation() call. It blocks the controller there and calls the
|
||||
|
@ -1229,6 +1245,7 @@ type mockVolumePlugin struct {
|
|||
deleteCallCounter int
|
||||
recycleCalls []error
|
||||
recycleCallCounter int
|
||||
isMigratedToCSI bool
|
||||
provisionOptions vol.VolumeOptions
|
||||
}
|
||||
|
||||
|
@ -1259,7 +1276,7 @@ func (plugin *mockVolumePlugin) CanSupport(spec *vol.Spec) bool {
|
|||
}
|
||||
|
||||
func (plugin *mockVolumePlugin) IsMigratedToCSI() bool {
|
||||
return false
|
||||
return plugin.isMigratedToCSI
|
||||
}
|
||||
|
||||
func (plugin *mockVolumePlugin) RequiresRemount() bool {
|
||||
|
|
|
@ -421,6 +421,17 @@ func TestProvisionSync(t *testing.T) {
|
|||
[]string{"Warning ProvisioningFailed Mount options"},
|
||||
noerrors, wrapTestWithProvisionCalls([]provisionCall{}, testSyncClaim),
|
||||
},
|
||||
{
|
||||
// No provisioning due to CSI migration + normal event with external provisioner
|
||||
"11-21 - external provisioner for CSI migration",
|
||||
novolumes,
|
||||
novolumes,
|
||||
newClaimArray("claim11-21", "uid11-21", "1Gi", "", v1.ClaimPending, &classGold),
|
||||
claimWithAnnotation(annStorageProvisioner, "vendor.com/MockCSIPlugin",
|
||||
newClaimArray("claim11-21", "uid11-21", "1Gi", "", v1.ClaimPending, &classGold)),
|
||||
[]string{"Normal ExternalProvisioning"},
|
||||
noerrors, wrapTestWithCSIMigrationProvisionCalls(testSyncClaim),
|
||||
},
|
||||
}
|
||||
runSyncTests(t, tests, storageClasses, []*v1.Pod{})
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ import (
|
|||
"k8s.io/client-go/util/workqueue"
|
||||
cloudprovider "k8s.io/cloud-provider"
|
||||
volerr "k8s.io/cloud-provider/volume/errors"
|
||||
csitranslation "k8s.io/csi-translation-lib"
|
||||
v1helper "k8s.io/kubernetes/pkg/apis/core/v1/helper"
|
||||
"k8s.io/kubernetes/pkg/controller/volume/events"
|
||||
"k8s.io/kubernetes/pkg/controller/volume/persistentvolume/metrics"
|
||||
|
@ -230,6 +231,10 @@ type PersistentVolumeController struct {
|
|||
|
||||
createProvisionedPVRetryCount int
|
||||
createProvisionedPVInterval time.Duration
|
||||
|
||||
// For testing only: hook to intercept CSI driver name <=> Intree plugin name mapping
|
||||
// Not used when set to nil
|
||||
csiNameFromIntreeNameHook func(pluginName string) (string, error)
|
||||
}
|
||||
|
||||
// syncClaim is the main controller method to decide what to do with a claim.
|
||||
|
@ -1346,6 +1351,13 @@ func (ctrl *PersistentVolumeController) provisionClaim(claim *v1.PersistentVolum
|
|||
return nil
|
||||
}
|
||||
|
||||
func (ctrl *PersistentVolumeController) getCSINameFromIntreeName(pluginName string) (string, error) {
|
||||
if ctrl.csiNameFromIntreeNameHook != nil {
|
||||
return ctrl.csiNameFromIntreeNameHook(pluginName)
|
||||
}
|
||||
return csitranslation.GetCSINameFromIntreeName(pluginName)
|
||||
}
|
||||
|
||||
// provisionClaimOperation provisions a volume. This method is running in
|
||||
// standalone goroutine and already has all necessary locks.
|
||||
func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.PersistentVolumeClaim) (string, error) {
|
||||
|
@ -1362,12 +1374,26 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.Persis
|
|||
}
|
||||
|
||||
var pluginName string
|
||||
provisionerName := storageClass.Provisioner
|
||||
if plugin != nil {
|
||||
pluginName = plugin.GetPluginName()
|
||||
if plugin.IsMigratedToCSI() {
|
||||
// pluginName is not set here to align with existing behavior
|
||||
// of not setting pluginName for external provisioners (including CSI)
|
||||
// Set provisionerName to CSI plugin name for setClaimProvisioner
|
||||
provisionerName, err = ctrl.getCSINameFromIntreeName(storageClass.Provisioner)
|
||||
if err != nil {
|
||||
strerr := fmt.Sprintf("error getting CSI name for In tree plugin %s: %v", storageClass.Provisioner, err)
|
||||
klog.V(2).Infof("%s", strerr)
|
||||
ctrl.eventRecorder.Event(claim, v1.EventTypeWarning, events.ProvisioningFailed, strerr)
|
||||
return "", err
|
||||
}
|
||||
} else {
|
||||
pluginName = plugin.GetPluginName()
|
||||
}
|
||||
}
|
||||
|
||||
// Add provisioner annotation so external provisioners know when to start
|
||||
newClaim, err := ctrl.setClaimProvisioner(claim, storageClass)
|
||||
newClaim, err := ctrl.setClaimProvisioner(claim, provisionerName)
|
||||
if err != nil {
|
||||
// Save failed, the controller will retry in the next sync
|
||||
klog.V(2).Infof("error saving claim %s: %v", claimToClaimKey(claim), err)
|
||||
|
@ -1375,7 +1401,7 @@ func (ctrl *PersistentVolumeController) provisionClaimOperation(claim *v1.Persis
|
|||
}
|
||||
claim = newClaim
|
||||
|
||||
if plugin == nil {
|
||||
if plugin == nil || plugin.IsMigratedToCSI() {
|
||||
// findProvisionablePlugin returned no error nor plugin.
|
||||
// This means that an unknown provisioner is requested. Report an event
|
||||
// and wait for the external provisioner
|
||||
|
|
|
@ -22,7 +22,6 @@ import (
|
|||
"time"
|
||||
|
||||
"k8s.io/api/core/v1"
|
||||
storage "k8s.io/api/storage/v1"
|
||||
"k8s.io/apimachinery/pkg/api/errors"
|
||||
"k8s.io/apimachinery/pkg/api/meta"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
|
@ -428,8 +427,8 @@ func (ctrl *PersistentVolumeController) resync() {
|
|||
|
||||
// setClaimProvisioner saves
|
||||
// claim.Annotations[annStorageProvisioner] = class.Provisioner
|
||||
func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.PersistentVolumeClaim, class *storage.StorageClass) (*v1.PersistentVolumeClaim, error) {
|
||||
if val, ok := claim.Annotations[annStorageProvisioner]; ok && val == class.Provisioner {
|
||||
func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.PersistentVolumeClaim, provisionerName string) (*v1.PersistentVolumeClaim, error) {
|
||||
if val, ok := claim.Annotations[annStorageProvisioner]; ok && val == provisionerName {
|
||||
// annotation is already set, nothing to do
|
||||
return claim, nil
|
||||
}
|
||||
|
@ -437,7 +436,7 @@ func (ctrl *PersistentVolumeController) setClaimProvisioner(claim *v1.Persistent
|
|||
// The volume from method args can be pointing to watcher cache. We must not
|
||||
// modify these, therefore create a copy.
|
||||
claimClone := claim.DeepCopy()
|
||||
metav1.SetMetaDataAnnotation(&claimClone.ObjectMeta, annStorageProvisioner, class.Provisioner)
|
||||
metav1.SetMetaDataAnnotation(&claimClone.ObjectMeta, annStorageProvisioner, provisionerName)
|
||||
newClaim, err := ctrl.kubeClient.CoreV1().PersistentVolumeClaims(claim.Namespace).Update(claimClone)
|
||||
if err != nil {
|
||||
return newClaim, err
|
||||
|
|
|
@ -134,13 +134,6 @@ const (
|
|||
// 'MemoryPressure', 'PIDPressure' and 'DiskPressure'.
|
||||
TaintNodesByCondition utilfeature.Feature = "TaintNodesByCondition"
|
||||
|
||||
// owner: @jsafrane
|
||||
// GA: v1.12
|
||||
//
|
||||
// Note: This feature gate is unconditionally enabled in v1.13 and will be removed in v1.14.
|
||||
// Enable mount propagation of volumes.
|
||||
MountPropagation utilfeature.Feature = "MountPropagation"
|
||||
|
||||
// owner: @sjenning
|
||||
// alpha: v1.11
|
||||
//
|
||||
|
@ -443,7 +436,6 @@ var defaultKubernetesFeatureGates = map[utilfeature.Feature]utilfeature.FeatureS
|
|||
PodShareProcessNamespace: {Default: true, PreRelease: utilfeature.Beta},
|
||||
PodPriority: {Default: true, PreRelease: utilfeature.GA},
|
||||
TaintNodesByCondition: {Default: true, PreRelease: utilfeature.Beta},
|
||||
MountPropagation: {Default: true, PreRelease: utilfeature.GA, LockToDefault: true}, // remove in 1.14
|
||||
QOSReserved: {Default: false, PreRelease: utilfeature.Alpha},
|
||||
ExpandPersistentVolumes: {Default: true, PreRelease: utilfeature.Beta},
|
||||
ExpandInUsePersistentVolumes: {Default: false, PreRelease: utilfeature.Alpha},
|
||||
|
|
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/4.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/4.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/4.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/4.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/5.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/5.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/5.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/5.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list-fail/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/4.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/4.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/4.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/4.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-list/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied-syntax-error/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/2.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/2.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/2.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/2.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-apply-edit-last-applied/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/0.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/0.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/0.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/0.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list-error/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/0.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/0.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/0.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/0.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/1.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/1.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/2.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/2.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/3.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/3.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-create-list/test.yaml
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/0.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/0.response
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/1.edited
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/1.original
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/2.request
vendored
Executable file → Normal file
0
pkg/kubectl/cmd/edit/testdata/testcase-edit-error-reedit/2.request
vendored
Executable file → Normal file
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue