mirror of https://github.com/k3s-io/k3s
Merge pull request #66965 from deads2k/kubectl-08-internalfactoryclient
Automatic merge from submit-queue (batch tested with PRs 61389, 66817, 66903, 66675, 66965). If you want to cherry-pick this change to another branch, please follow the instructions <a href="https://github.com/kubernetes/community/blob/master/contributors/devel/cherry-picks.md">here</a>. remove internal client factory method remove final uses of the internal client factory method. https://github.com/kubernetes/kubernetes/pull/66933 does the rolling updater, so this just snips it off and prevents anyone else from ever relying on it. @kubernetes/sig-cli-maintainers /assign @soltysh ```release-note NONE ```pull/8/head
commit
8a5e9ecf8f
|
@ -57,10 +57,8 @@ go_library(
|
||||||
],
|
],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/apis/certificates:go_default_library",
|
|
||||||
"//pkg/apis/core:go_default_library",
|
"//pkg/apis/core:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset/typed/core/internalversion:go_default_library",
|
|
||||||
"//pkg/kubectl:go_default_library",
|
"//pkg/kubectl:go_default_library",
|
||||||
"//pkg/kubectl/apply/parse:go_default_library",
|
"//pkg/kubectl/apply/parse:go_default_library",
|
||||||
"//pkg/kubectl/apply/strategy:go_default_library",
|
"//pkg/kubectl/apply/strategy:go_default_library",
|
||||||
|
@ -94,6 +92,7 @@ go_library(
|
||||||
"//pkg/util/taints:go_default_library",
|
"//pkg/util/taints:go_default_library",
|
||||||
"//pkg/version:go_default_library",
|
"//pkg/version:go_default_library",
|
||||||
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
|
"//staging/src/k8s.io/api/autoscaling/v1:go_default_library",
|
||||||
|
"//staging/src/k8s.io/api/certificates/v1beta1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
"//staging/src/k8s.io/api/core/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
|
"//staging/src/k8s.io/api/policy/v1beta1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/api/errors:go_default_library",
|
||||||
|
|
|
@ -20,12 +20,13 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
|
certificatesv1beta1 "k8s.io/api/certificates/v1beta1"
|
||||||
"k8s.io/apimachinery/pkg/api/errors"
|
"k8s.io/apimachinery/pkg/api/errors"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/client-go/kubernetes"
|
||||||
"k8s.io/kubernetes/pkg/apis/certificates"
|
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
|
@ -33,8 +34,6 @@ import (
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
"k8s.io/kubernetes/pkg/kubectl/scheme"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewCmdCertificate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
func NewCmdCertificate(f cmdutil.Factory, ioStreams genericclioptions.IOStreams) *cobra.Command {
|
||||||
|
@ -63,7 +62,7 @@ type CertificateOptions struct {
|
||||||
csrNames []string
|
csrNames []string
|
||||||
outputStyle string
|
outputStyle string
|
||||||
|
|
||||||
clientSet internalclientset.Interface
|
clientSet kubernetes.Interface
|
||||||
builder *resource.Builder
|
builder *resource.Builder
|
||||||
|
|
||||||
genericclioptions.IOStreams
|
genericclioptions.IOStreams
|
||||||
|
@ -83,7 +82,7 @@ func (o *CertificateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
||||||
}
|
}
|
||||||
|
|
||||||
o.builder = f.NewBuilder()
|
o.builder = f.NewBuilder()
|
||||||
o.clientSet, err = f.ClientSet()
|
o.clientSet, err = f.KubernetesClientSet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -135,18 +134,18 @@ func NewCmdCertificateApprove(f cmdutil.Factory, ioStreams genericclioptions.IOS
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *CertificateOptions) RunCertificateApprove(force bool) error {
|
func (o *CertificateOptions) RunCertificateApprove(force bool) error {
|
||||||
return o.modifyCertificateCondition(o.builder, o.clientSet, force, func(csr *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, bool) {
|
return o.modifyCertificateCondition(o.builder, o.clientSet, force, func(csr *certificatesv1beta1.CertificateSigningRequest) (*certificatesv1beta1.CertificateSigningRequest, bool) {
|
||||||
var alreadyApproved bool
|
var alreadyApproved bool
|
||||||
for _, c := range csr.Status.Conditions {
|
for _, c := range csr.Status.Conditions {
|
||||||
if c.Type == certificates.CertificateApproved {
|
if c.Type == certificatesv1beta1.CertificateApproved {
|
||||||
alreadyApproved = true
|
alreadyApproved = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if alreadyApproved {
|
if alreadyApproved {
|
||||||
return csr, true
|
return csr, true
|
||||||
}
|
}
|
||||||
csr.Status.Conditions = append(csr.Status.Conditions, certificates.CertificateSigningRequestCondition{
|
csr.Status.Conditions = append(csr.Status.Conditions, certificatesv1beta1.CertificateSigningRequestCondition{
|
||||||
Type: certificates.CertificateApproved,
|
Type: certificatesv1beta1.CertificateApproved,
|
||||||
Reason: "KubectlApprove",
|
Reason: "KubectlApprove",
|
||||||
Message: "This CSR was approved by kubectl certificate approve.",
|
Message: "This CSR was approved by kubectl certificate approve.",
|
||||||
LastUpdateTime: metav1.Now(),
|
LastUpdateTime: metav1.Now(),
|
||||||
|
@ -187,18 +186,18 @@ func NewCmdCertificateDeny(f cmdutil.Factory, ioStreams genericclioptions.IOStre
|
||||||
}
|
}
|
||||||
|
|
||||||
func (o *CertificateOptions) RunCertificateDeny(force bool) error {
|
func (o *CertificateOptions) RunCertificateDeny(force bool) error {
|
||||||
return o.modifyCertificateCondition(o.builder, o.clientSet, force, func(csr *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, bool) {
|
return o.modifyCertificateCondition(o.builder, o.clientSet, force, func(csr *certificatesv1beta1.CertificateSigningRequest) (*certificatesv1beta1.CertificateSigningRequest, bool) {
|
||||||
var alreadyDenied bool
|
var alreadyDenied bool
|
||||||
for _, c := range csr.Status.Conditions {
|
for _, c := range csr.Status.Conditions {
|
||||||
if c.Type == certificates.CertificateDenied {
|
if c.Type == certificatesv1beta1.CertificateDenied {
|
||||||
alreadyDenied = true
|
alreadyDenied = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if alreadyDenied {
|
if alreadyDenied {
|
||||||
return csr, true
|
return csr, true
|
||||||
}
|
}
|
||||||
csr.Status.Conditions = append(csr.Status.Conditions, certificates.CertificateSigningRequestCondition{
|
csr.Status.Conditions = append(csr.Status.Conditions, certificatesv1beta1.CertificateSigningRequestCondition{
|
||||||
Type: certificates.CertificateDenied,
|
Type: certificatesv1beta1.CertificateDenied,
|
||||||
Reason: "KubectlDeny",
|
Reason: "KubectlDeny",
|
||||||
Message: "This CSR was denied by kubectl certificate deny.",
|
Message: "This CSR was denied by kubectl certificate deny.",
|
||||||
LastUpdateTime: metav1.Now(),
|
LastUpdateTime: metav1.Now(),
|
||||||
|
@ -207,10 +206,10 @@ func (o *CertificateOptions) RunCertificateDeny(force bool) error {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (options *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet internalclientset.Interface, force bool, modify func(csr *certificates.CertificateSigningRequest) (*certificates.CertificateSigningRequest, bool)) error {
|
func (options *CertificateOptions) modifyCertificateCondition(builder *resource.Builder, clientSet kubernetes.Interface, force bool, modify func(csr *certificatesv1beta1.CertificateSigningRequest) (*certificatesv1beta1.CertificateSigningRequest, bool)) error {
|
||||||
var found int
|
var found int
|
||||||
r := builder.
|
r := builder.
|
||||||
WithScheme(legacyscheme.Scheme).
|
WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...).
|
||||||
ContinueOnError().
|
ContinueOnError().
|
||||||
FilenameParam(false, &options.FilenameOptions).
|
FilenameParam(false, &options.FilenameOptions).
|
||||||
ResourceNames("certificatesigningrequest", options.csrNames...).
|
ResourceNames("certificatesigningrequest", options.csrNames...).
|
||||||
|
@ -223,7 +222,7 @@ func (options *CertificateOptions) modifyCertificateCondition(builder *resource.
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for i := 0; ; i++ {
|
for i := 0; ; i++ {
|
||||||
csr := info.Object.(*certificates.CertificateSigningRequest)
|
csr := info.Object.(*certificatesv1beta1.CertificateSigningRequest)
|
||||||
csr, hasCondition := modify(csr)
|
csr, hasCondition := modify(csr)
|
||||||
if !hasCondition || force {
|
if !hasCondition || force {
|
||||||
csr, err = clientSet.Certificates().
|
csr, err = clientSet.Certificates().
|
||||||
|
|
|
@ -28,14 +28,13 @@ import (
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/client-go/kubernetes/scheme"
|
"k8s.io/client-go/kubernetes/scheme"
|
||||||
|
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/client-go/tools/portforward"
|
"k8s.io/client-go/tools/portforward"
|
||||||
"k8s.io/client-go/transport/spdy"
|
"k8s.io/client-go/transport/spdy"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
|
||||||
coreclient "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset/typed/core/internalversion"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
|
@ -50,7 +49,7 @@ type PortForwardOptions struct {
|
||||||
PodName string
|
PodName string
|
||||||
RESTClient *restclient.RESTClient
|
RESTClient *restclient.RESTClient
|
||||||
Config *restclient.Config
|
Config *restclient.Config
|
||||||
PodClient coreclient.PodsGetter
|
PodClient corev1client.PodsGetter
|
||||||
Ports []string
|
Ports []string
|
||||||
PortForwarder portForwarder
|
PortForwarder portForwarder
|
||||||
StopChannel chan struct{}
|
StopChannel chan struct{}
|
||||||
|
@ -143,7 +142,7 @@ func (f *defaultPortForwarder) ForwardPorts(method string, url *url.URL, opts Po
|
||||||
// It rewrites ports as needed if the Service port declares targetPort.
|
// It rewrites ports as needed if the Service port declares targetPort.
|
||||||
// It returns an error when a named targetPort can't find a match in the pod, or the Service did not declare
|
// It returns an error when a named targetPort can't find a match in the pod, or the Service did not declare
|
||||||
// the port.
|
// the port.
|
||||||
func translateServicePortToTargetPort(ports []string, svc v1.Service, pod v1.Pod) ([]string, error) {
|
func translateServicePortToTargetPort(ports []string, svc corev1.Service, pod corev1.Pod) ([]string, error) {
|
||||||
var translated []string
|
var translated []string
|
||||||
for _, port := range ports {
|
for _, port := range ports {
|
||||||
// port is in the form of [LOCAL PORT]:REMOTE PORT
|
// port is in the form of [LOCAL PORT]:REMOTE PORT
|
||||||
|
@ -210,7 +209,7 @@ func (o *PortForwardOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
||||||
|
|
||||||
// handle service port mapping to target port if needed
|
// handle service port mapping to target port if needed
|
||||||
switch t := obj.(type) {
|
switch t := obj.(type) {
|
||||||
case *v1.Service:
|
case *corev1.Service:
|
||||||
o.Ports, err = translateServicePortToTargetPort(args[1:], *t, *forwardablePod)
|
o.Ports, err = translateServicePortToTargetPort(args[1:], *t, *forwardablePod)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -219,12 +218,12 @@ func (o *PortForwardOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, arg
|
||||||
o.Ports = args[1:]
|
o.Ports = args[1:]
|
||||||
}
|
}
|
||||||
|
|
||||||
clientset, err := f.ClientSet()
|
clientset, err := f.KubernetesClientSet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
o.PodClient = clientset.Core()
|
o.PodClient = clientset.CoreV1()
|
||||||
|
|
||||||
o.Config, err = f.ToRESTConfig()
|
o.Config, err = f.ToRESTConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -263,7 +262,7 @@ func (o PortForwardOptions) RunPortForward() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if pod.Status.Phase != api.PodRunning {
|
if pod.Status.Phase != corev1.PodRunning {
|
||||||
return fmt.Errorf("unable to forward port because pod is not running. Current status=%v", pod.Status.Phase)
|
return fmt.Errorf("unable to forward port because pod is not running. Current status=%v", pod.Status.Phase)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -219,7 +219,11 @@ func (o *RollingUpdateOptions) Complete(f cmdutil.Factory, cmd *cobra.Command, a
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
o.ClientSet, err = f.ClientSet()
|
clientConfig, err := f.ToRESTConfig()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
o.ClientSet, err = internalclientset.NewForConfig(clientConfig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,9 +33,8 @@ import (
|
||||||
"k8s.io/apimachinery/pkg/watch"
|
"k8s.io/apimachinery/pkg/watch"
|
||||||
"k8s.io/client-go/dynamic"
|
"k8s.io/client-go/dynamic"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
coreclientv1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
|
@ -274,7 +273,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if restartPolicy != api.RestartPolicyAlways && replicas != 1 {
|
if restartPolicy != corev1.RestartPolicyAlways && replicas != 1 {
|
||||||
return cmdutil.UsageErrorf(cmd, "--restart=%s requires that --replicas=1, found %d", restartPolicy, replicas)
|
return cmdutil.UsageErrorf(cmd, "--restart=%s requires that --replicas=1, found %d", restartPolicy, replicas)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -291,7 +290,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
clientset, err := f.ClientSet()
|
clientset, err := f.KubernetesClientSet()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -302,11 +301,11 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
|
||||||
}
|
}
|
||||||
if len(generatorName) == 0 {
|
if len(generatorName) == 0 {
|
||||||
switch restartPolicy {
|
switch restartPolicy {
|
||||||
case api.RestartPolicyAlways:
|
case corev1.RestartPolicyAlways:
|
||||||
generatorName = cmdutil.DeploymentAppsV1Beta1GeneratorName
|
generatorName = cmdutil.DeploymentAppsV1Beta1GeneratorName
|
||||||
case api.RestartPolicyOnFailure:
|
case corev1.RestartPolicyOnFailure:
|
||||||
generatorName = cmdutil.JobV1GeneratorName
|
generatorName = cmdutil.JobV1GeneratorName
|
||||||
case api.RestartPolicyNever:
|
case corev1.RestartPolicyNever:
|
||||||
generatorName = cmdutil.RunPodV1GeneratorName
|
generatorName = cmdutil.RunPodV1GeneratorName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -397,7 +396,7 @@ func (o *RunOptions) Run(f cmdutil.Factory, cmd *cobra.Command, args []string) e
|
||||||
|
|
||||||
var pod *corev1.Pod
|
var pod *corev1.Pod
|
||||||
leaveStdinOpen := o.LeaveStdinOpen
|
leaveStdinOpen := o.LeaveStdinOpen
|
||||||
waitForExitCode := !leaveStdinOpen && restartPolicy == api.RestartPolicyNever
|
waitForExitCode := !leaveStdinOpen && restartPolicy == corev1.RestartPolicyNever
|
||||||
if waitForExitCode {
|
if waitForExitCode {
|
||||||
pod, err = waitForPod(clientset.CoreV1(), attachablePod.Namespace, attachablePod.Name, kubectl.PodCompleted)
|
pod, err = waitForPod(clientset.CoreV1(), attachablePod.Namespace, attachablePod.Name, kubectl.PodCompleted)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -468,7 +467,7 @@ func (o *RunOptions) removeCreatedObjects(f cmdutil.Factory, createdObjects []*R
|
||||||
}
|
}
|
||||||
|
|
||||||
// waitForPod watches the given pod until the exitCondition is true
|
// waitForPod watches the given pod until the exitCondition is true
|
||||||
func waitForPod(podClient coreclientv1.PodsGetter, ns, name string, exitCondition watch.ConditionFunc) (*corev1.Pod, error) {
|
func waitForPod(podClient corev1client.PodsGetter, ns, name string, exitCondition watch.ConditionFunc) (*corev1.Pod, error) {
|
||||||
w, err := podClient.Pods(ns).Watch(metav1.SingleObject(metav1.ObjectMeta{Name: name}))
|
w, err := podClient.Pods(ns).Watch(metav1.SingleObject(metav1.ObjectMeta{Name: name}))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
@ -488,13 +487,13 @@ func waitForPod(podClient coreclientv1.PodsGetter, ns, name string, exitConditio
|
||||||
|
|
||||||
// Fix generic not found error.
|
// Fix generic not found error.
|
||||||
if err != nil && errors.IsNotFound(err) {
|
if err != nil && errors.IsNotFound(err) {
|
||||||
err = errors.NewNotFound(api.Resource("pods"), name)
|
err = errors.NewNotFound(corev1.Resource("pods"), name)
|
||||||
}
|
}
|
||||||
|
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func handleAttachPod(f cmdutil.Factory, podClient coreclientv1.PodsGetter, ns, name string, opts *AttachOptions) error {
|
func handleAttachPod(f cmdutil.Factory, podClient corev1client.PodsGetter, ns, name string, opts *AttachOptions) error {
|
||||||
pod, err := waitForPod(podClient, ns, name, kubectl.PodRunningAndReady)
|
pod, err := waitForPod(podClient, ns, name, kubectl.PodRunningAndReady)
|
||||||
if err != nil && err != kubectl.ErrPodCompleted {
|
if err != nil && err != kubectl.ErrPodCompleted {
|
||||||
return err
|
return err
|
||||||
|
@ -539,30 +538,30 @@ func logOpts(restClientGetter genericclioptions.RESTClientGetter, pod *corev1.Po
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRestartPolicy(cmd *cobra.Command, interactive bool) (api.RestartPolicy, error) {
|
func getRestartPolicy(cmd *cobra.Command, interactive bool) (corev1.RestartPolicy, error) {
|
||||||
restart := cmdutil.GetFlagString(cmd, "restart")
|
restart := cmdutil.GetFlagString(cmd, "restart")
|
||||||
if len(restart) == 0 {
|
if len(restart) == 0 {
|
||||||
if interactive {
|
if interactive {
|
||||||
return api.RestartPolicyOnFailure, nil
|
return corev1.RestartPolicyOnFailure, nil
|
||||||
} else {
|
} else {
|
||||||
return api.RestartPolicyAlways, nil
|
return corev1.RestartPolicyAlways, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch api.RestartPolicy(restart) {
|
switch corev1.RestartPolicy(restart) {
|
||||||
case api.RestartPolicyAlways:
|
case corev1.RestartPolicyAlways:
|
||||||
return api.RestartPolicyAlways, nil
|
return corev1.RestartPolicyAlways, nil
|
||||||
case api.RestartPolicyOnFailure:
|
case corev1.RestartPolicyOnFailure:
|
||||||
return api.RestartPolicyOnFailure, nil
|
return corev1.RestartPolicyOnFailure, nil
|
||||||
case api.RestartPolicyNever:
|
case corev1.RestartPolicyNever:
|
||||||
return api.RestartPolicyNever, nil
|
return corev1.RestartPolicyNever, nil
|
||||||
}
|
}
|
||||||
return "", cmdutil.UsageErrorf(cmd, "invalid restart policy: %s", restart)
|
return "", cmdutil.UsageErrorf(cmd, "invalid restart policy: %s", restart)
|
||||||
}
|
}
|
||||||
|
|
||||||
func verifyImagePullPolicy(cmd *cobra.Command) error {
|
func verifyImagePullPolicy(cmd *cobra.Command) error {
|
||||||
pullPolicy := cmdutil.GetFlagString(cmd, "image-pull-policy")
|
pullPolicy := cmdutil.GetFlagString(cmd, "image-pull-policy")
|
||||||
switch api.PullPolicy(pullPolicy) {
|
switch corev1.PullPolicy(pullPolicy) {
|
||||||
case api.PullAlways, api.PullIfNotPresent, api.PullNever:
|
case corev1.PullAlways, corev1.PullIfNotPresent, corev1.PullNever:
|
||||||
return nil
|
return nil
|
||||||
case "":
|
case "":
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -29,6 +29,7 @@ import (
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/runtime"
|
"k8s.io/apimachinery/pkg/runtime"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
|
@ -54,35 +55,35 @@ func TestGetRestartPolicy(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
input string
|
input string
|
||||||
interactive bool
|
interactive bool
|
||||||
expected api.RestartPolicy
|
expected corev1.RestartPolicy
|
||||||
expectErr bool
|
expectErr bool
|
||||||
}{
|
}{
|
||||||
{
|
{
|
||||||
input: "",
|
input: "",
|
||||||
expected: api.RestartPolicyAlways,
|
expected: corev1.RestartPolicyAlways,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "",
|
input: "",
|
||||||
interactive: true,
|
interactive: true,
|
||||||
expected: api.RestartPolicyOnFailure,
|
expected: corev1.RestartPolicyOnFailure,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: string(api.RestartPolicyAlways),
|
input: string(corev1.RestartPolicyAlways),
|
||||||
interactive: true,
|
interactive: true,
|
||||||
expected: api.RestartPolicyAlways,
|
expected: corev1.RestartPolicyAlways,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: string(api.RestartPolicyNever),
|
input: string(corev1.RestartPolicyNever),
|
||||||
interactive: true,
|
interactive: true,
|
||||||
expected: api.RestartPolicyNever,
|
expected: corev1.RestartPolicyNever,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: string(api.RestartPolicyAlways),
|
input: string(corev1.RestartPolicyAlways),
|
||||||
expected: api.RestartPolicyAlways,
|
expected: corev1.RestartPolicyAlways,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: string(api.RestartPolicyNever),
|
input: string(corev1.RestartPolicyNever),
|
||||||
expected: api.RestartPolicyNever,
|
expected: corev1.RestartPolicyNever,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
input: "foo",
|
input: "foo",
|
||||||
|
@ -234,7 +235,6 @@ func TestRunArgsFollowDashRules(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGenerateService(t *testing.T) {
|
func TestGenerateService(t *testing.T) {
|
||||||
|
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
port string
|
port string
|
||||||
args []string
|
args []string
|
||||||
|
|
|
@ -10,7 +10,6 @@ go_library(
|
||||||
visibility = ["//build/visible_to:pkg_kubectl_cmd_testing_CONSUMERS"],
|
visibility = ["//build/visible_to:pkg_kubectl_cmd_testing_CONSUMERS"],
|
||||||
deps = [
|
deps = [
|
||||||
"//pkg/api/legacyscheme:go_default_library",
|
"//pkg/api/legacyscheme:go_default_library",
|
||||||
"//pkg/client/clientset_generated/internalclientset:go_default_library",
|
|
||||||
"//pkg/kubectl:go_default_library",
|
"//pkg/kubectl:go_default_library",
|
||||||
"//pkg/kubectl/cmd/util:go_default_library",
|
"//pkg/kubectl/cmd/util:go_default_library",
|
||||||
"//pkg/kubectl/cmd/util/openapi:go_default_library",
|
"//pkg/kubectl/cmd/util/openapi:go_default_library",
|
||||||
|
|
|
@ -42,7 +42,6 @@ import (
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
|
clientcmdapi "k8s.io/client-go/tools/clientcmd/api"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl"
|
"k8s.io/kubernetes/pkg/kubectl"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
||||||
|
@ -366,26 +365,6 @@ func (f *TestFactory) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||||
return clientset, nil
|
return clientset, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *TestFactory) ClientSet() (internalclientset.Interface, error) {
|
|
||||||
// Swap the HTTP client out of the REST client with the fake
|
|
||||||
// version.
|
|
||||||
fakeClient := f.Client.(*fake.RESTClient)
|
|
||||||
clientset := internalclientset.NewForConfigOrDie(f.ClientConfigVal)
|
|
||||||
clientset.Core().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Authentication().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Authorization().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Autoscaling().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Batch().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Certificates().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Extensions().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Rbac().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Storage().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Apps().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.Policy().RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
clientset.DiscoveryClient.RESTClient().(*restclient.RESTClient).Client = fakeClient.Client
|
|
||||||
return clientset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *TestFactory) DynamicClient() (dynamic.Interface, error) {
|
func (f *TestFactory) DynamicClient() (dynamic.Interface, error) {
|
||||||
if f.FakeDynamicClient != nil {
|
if f.FakeDynamicClient != nil {
|
||||||
return f.FakeDynamicClient, nil
|
return f.FakeDynamicClient, nil
|
||||||
|
|
|
@ -25,7 +25,7 @@ import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
|
@ -40,7 +40,7 @@ import (
|
||||||
type TopNodeOptions struct {
|
type TopNodeOptions struct {
|
||||||
ResourceName string
|
ResourceName string
|
||||||
Selector string
|
Selector string
|
||||||
NodeClient corev1.CoreV1Interface
|
NodeClient corev1client.CoreV1Interface
|
||||||
HeapsterOptions HeapsterTopOptions
|
HeapsterOptions HeapsterTopOptions
|
||||||
Client *metricsutil.HeapsterMetricsClient
|
Client *metricsutil.HeapsterMetricsClient
|
||||||
Printer *metricsutil.TopCmdPrinter
|
Printer *metricsutil.TopCmdPrinter
|
||||||
|
|
|
@ -25,7 +25,7 @@ import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/client-go/discovery"
|
"k8s.io/client-go/discovery"
|
||||||
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
|
||||||
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/metricsutil"
|
"k8s.io/kubernetes/pkg/kubectl/metricsutil"
|
||||||
|
@ -45,7 +45,7 @@ type TopPodOptions struct {
|
||||||
Selector string
|
Selector string
|
||||||
AllNamespaces bool
|
AllNamespaces bool
|
||||||
PrintContainers bool
|
PrintContainers bool
|
||||||
PodClient corev1.PodsGetter
|
PodClient corev1client.PodsGetter
|
||||||
HeapsterOptions HeapsterTopOptions
|
HeapsterOptions HeapsterTopOptions
|
||||||
Client *metricsutil.HeapsterMetricsClient
|
Client *metricsutil.HeapsterMetricsClient
|
||||||
Printer *metricsutil.TopCmdPrinter
|
Printer *metricsutil.TopCmdPrinter
|
||||||
|
|
|
@ -21,7 +21,6 @@ import (
|
||||||
"k8s.io/client-go/dynamic"
|
"k8s.io/client-go/dynamic"
|
||||||
"k8s.io/client-go/kubernetes"
|
"k8s.io/client-go/kubernetes"
|
||||||
restclient "k8s.io/client-go/rest"
|
restclient "k8s.io/client-go/rest"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions/resource"
|
||||||
|
@ -41,9 +40,6 @@ import (
|
||||||
type Factory interface {
|
type Factory interface {
|
||||||
genericclioptions.RESTClientGetter
|
genericclioptions.RESTClientGetter
|
||||||
|
|
||||||
// ClientSet gives you back an internal, generated clientset
|
|
||||||
ClientSet() (internalclientset.Interface, error)
|
|
||||||
|
|
||||||
// DynamicClient returns a dynamic client ready for use
|
// DynamicClient returns a dynamic client ready for use
|
||||||
DynamicClient() (dynamic.Interface, error)
|
DynamicClient() (dynamic.Interface, error)
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,6 @@ import (
|
||||||
"k8s.io/client-go/tools/clientcmd"
|
"k8s.io/client-go/tools/clientcmd"
|
||||||
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
"k8s.io/kubernetes/pkg/api/legacyscheme"
|
||||||
api "k8s.io/kubernetes/pkg/apis/core"
|
api "k8s.io/kubernetes/pkg/apis/core"
|
||||||
"k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
|
|
||||||
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
"k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi"
|
||||||
openapivalidation "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/validation"
|
openapivalidation "k8s.io/kubernetes/pkg/kubectl/cmd/util/openapi/validation"
|
||||||
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
"k8s.io/kubernetes/pkg/kubectl/genericclioptions"
|
||||||
|
@ -87,14 +86,6 @@ func (f *factoryImpl) KubernetesClientSet() (*kubernetes.Clientset, error) {
|
||||||
return kubernetes.NewForConfig(clientConfig)
|
return kubernetes.NewForConfig(clientConfig)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *factoryImpl) ClientSet() (internalclientset.Interface, error) {
|
|
||||||
clientConfig, err := f.ToRESTConfig()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return internalclientset.NewForConfig(clientConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *factoryImpl) DynamicClient() (dynamic.Interface, error) {
|
func (f *factoryImpl) DynamicClient() (dynamic.Interface, error) {
|
||||||
clientConfig, err := f.ToRESTConfig()
|
clientConfig, err := f.ToRESTConfig()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
"k8s.io/apimachinery/pkg/labels"
|
"k8s.io/apimachinery/pkg/labels"
|
||||||
"k8s.io/apimachinery/pkg/runtime/schema"
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
||||||
corev1 "k8s.io/client-go/kubernetes/typed/core/v1"
|
corev1client "k8s.io/client-go/kubernetes/typed/core/v1"
|
||||||
"k8s.io/kubernetes/pkg/apis/core/validation"
|
"k8s.io/kubernetes/pkg/apis/core/validation"
|
||||||
metricsapi "k8s.io/metrics/pkg/apis/metrics"
|
metricsapi "k8s.io/metrics/pkg/apis/metrics"
|
||||||
metricsv1alpha1api "k8s.io/metrics/pkg/apis/metrics/v1alpha1"
|
metricsv1alpha1api "k8s.io/metrics/pkg/apis/metrics/v1alpha1"
|
||||||
|
@ -47,14 +47,14 @@ var (
|
||||||
)
|
)
|
||||||
|
|
||||||
type HeapsterMetricsClient struct {
|
type HeapsterMetricsClient struct {
|
||||||
SVCClient corev1.ServicesGetter
|
SVCClient corev1client.ServicesGetter
|
||||||
HeapsterNamespace string
|
HeapsterNamespace string
|
||||||
HeapsterScheme string
|
HeapsterScheme string
|
||||||
HeapsterService string
|
HeapsterService string
|
||||||
HeapsterPort string
|
HeapsterPort string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewHeapsterMetricsClient(svcClient corev1.ServicesGetter, namespace, scheme, service, port string) *HeapsterMetricsClient {
|
func NewHeapsterMetricsClient(svcClient corev1client.ServicesGetter, namespace, scheme, service, port string) *HeapsterMetricsClient {
|
||||||
return &HeapsterMetricsClient{
|
return &HeapsterMetricsClient{
|
||||||
SVCClient: svcClient,
|
SVCClient: svcClient,
|
||||||
HeapsterNamespace: namespace,
|
HeapsterNamespace: namespace,
|
||||||
|
@ -64,10 +64,6 @@ func NewHeapsterMetricsClient(svcClient corev1.ServicesGetter, namespace, scheme
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func DefaultHeapsterMetricsClient(svcClient corev1.ServicesGetter) *HeapsterMetricsClient {
|
|
||||||
return NewHeapsterMetricsClient(svcClient, DefaultHeapsterNamespace, DefaultHeapsterScheme, DefaultHeapsterService, DefaultHeapsterPort)
|
|
||||||
}
|
|
||||||
|
|
||||||
func podMetricsUrl(namespace string, name string) (string, error) {
|
func podMetricsUrl(namespace string, name string) (string, error) {
|
||||||
if namespace == metav1.NamespaceAll {
|
if namespace == metav1.NamespaceAll {
|
||||||
return fmt.Sprintf("%s/pods", metricsRoot), nil
|
return fmt.Sprintf("%s/pods", metricsRoot), nil
|
||||||
|
|
Loading…
Reference in New Issue