Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
a8c63b61
Commit
a8c63b61
authored
Apr 11, 2018
by
Ayush Pateria
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add basic generator for apps/v1 deployment
parent
6bf1871e
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
146 additions
and
69 deletions
+146
-69
BUILD
pkg/kubectl/BUILD
+1
-0
BUILD
pkg/kubectl/cmd/BUILD
+0
-1
create_deployment.go
pkg/kubectl/cmd/create_deployment.go
+22
-7
create_deployment_test.go
pkg/kubectl/cmd/create_deployment_test.go
+22
-8
run.go
pkg/kubectl/cmd/run.go
+13
-36
factory_client_access.go
pkg/kubectl/cmd/util/factory_client_access.go
+46
-6
deployment.go
pkg/kubectl/deployment.go
+35
-4
deployment_test.go
pkg/kubectl/deployment_test.go
+7
-7
No files found.
pkg/kubectl/BUILD
View file @
a8c63b61
...
@@ -49,6 +49,7 @@ go_test(
...
@@ -49,6 +49,7 @@ go_test(
"//pkg/kubectl/util:go_default_library",
"//pkg/kubectl/util:go_default_library",
"//pkg/util/pointer:go_default_library",
"//pkg/util/pointer:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/github.com/spf13/cobra:go_default_library",
"//vendor/k8s.io/api/apps/v1:go_default_library",
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
"//vendor/k8s.io/api/apps/v1beta1:go_default_library",
"//vendor/k8s.io/api/autoscaling/v1:go_default_library",
"//vendor/k8s.io/api/autoscaling/v1:go_default_library",
"//vendor/k8s.io/api/batch/v1:go_default_library",
"//vendor/k8s.io/api/batch/v1:go_default_library",
...
...
pkg/kubectl/cmd/BUILD
View file @
a8c63b61
...
@@ -117,7 +117,6 @@ go_library(
...
@@ -117,7 +117,6 @@ go_library(
"//vendor/k8s.io/api/batch/v1:go_default_library",
"//vendor/k8s.io/api/batch/v1:go_default_library",
"//vendor/k8s.io/api/batch/v1beta1:go_default_library",
"//vendor/k8s.io/api/batch/v1beta1:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/core/v1:go_default_library",
"//vendor/k8s.io/api/extensions/v1beta1:go_default_library",
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
"//vendor/k8s.io/api/policy/v1beta1:go_default_library",
"//vendor/k8s.io/api/rbac/v1:go_default_library",
"//vendor/k8s.io/api/rbac/v1:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
"//vendor/k8s.io/apimachinery/pkg/api/errors:go_default_library",
...
...
pkg/kubectl/cmd/create_deployment.go
View file @
a8c63b61
...
@@ -55,7 +55,7 @@ func NewCmdCreateDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer) *cobra.
...
@@ -55,7 +55,7 @@ func NewCmdCreateDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer) *cobra.
cmdutil
.
AddApplyAnnotationFlags
(
cmd
)
cmdutil
.
AddApplyAnnotationFlags
(
cmd
)
cmdutil
.
AddValidateFlags
(
cmd
)
cmdutil
.
AddValidateFlags
(
cmd
)
cmdutil
.
AddPrinterFlags
(
cmd
)
cmdutil
.
AddPrinterFlags
(
cmd
)
cmdutil
.
AddGeneratorFlags
(
cmd
,
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
)
cmdutil
.
AddGeneratorFlags
(
cmd
,
""
)
cmd
.
Flags
()
.
StringSlice
(
"image"
,
[]
string
{},
"Image name to run."
)
cmd
.
Flags
()
.
StringSlice
(
"image"
,
[]
string
{},
"Image name to run."
)
cmd
.
MarkFlagRequired
(
"image"
)
cmd
.
MarkFlagRequired
(
"image"
)
return
cmd
return
cmd
...
@@ -71,7 +71,7 @@ func generatorFromName(
...
@@ -71,7 +71,7 @@ func generatorFromName(
)
(
kubectl
.
StructuredGenerator
,
bool
)
{
)
(
kubectl
.
StructuredGenerator
,
bool
)
{
switch
generatorName
{
switch
generatorName
{
case
cmdutil
.
DeploymentBasicAppsV1
Beta1
GeneratorName
:
case
cmdutil
.
DeploymentBasicAppsV1GeneratorName
:
generator
:=
&
kubectl
.
DeploymentBasicAppsGeneratorV1
{
generator
:=
&
kubectl
.
DeploymentBasicAppsGeneratorV1
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
Name
:
deploymentName
,
Name
:
deploymentName
,
...
@@ -80,6 +80,15 @@ func generatorFromName(
...
@@ -80,6 +80,15 @@ func generatorFromName(
}
}
return
generator
,
true
return
generator
,
true
case
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
:
generator
:=
&
kubectl
.
DeploymentBasicAppsGeneratorV1Beta1
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
}
return
generator
,
true
case
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
:
case
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
:
generator
:=
&
kubectl
.
DeploymentBasicGeneratorV1
{
generator
:=
&
kubectl
.
DeploymentBasicGeneratorV1
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
...
@@ -112,11 +121,17 @@ func createDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer,
...
@@ -112,11 +121,17 @@ func createDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer,
generatorName
:=
cmdutil
.
GetFlagString
(
cmd
,
"generator"
)
generatorName
:=
cmdutil
.
GetFlagString
(
cmd
,
"generator"
)
// It is possible we have to modify the user-provided generator name if
if
len
(
generatorName
)
==
0
{
// the server does not have support for the requested generator.
generatorName
=
cmdutil
.
DeploymentBasicAppsV1GeneratorName
generatorName
,
err
=
cmdutil
.
FallbackGeneratorNameIfNecessary
(
generatorName
,
clientset
.
Discovery
(),
cmdErr
)
generatorNameTemp
,
err
:=
cmdutil
.
FallbackGeneratorNameIfNecessary
(
generatorName
,
clientset
.
Discovery
(),
cmdErr
)
if
err
!=
nil
{
if
err
!=
nil
{
return
err
return
err
}
if
generatorNameTemp
!=
generatorName
{
cmdutil
.
Warning
(
cmdErr
,
generatorName
,
generatorNameTemp
)
}
else
{
generatorName
=
generatorNameTemp
}
}
}
imageNames
:=
cmdutil
.
GetFlagStringSlice
(
cmd
,
"image"
)
imageNames
:=
cmdutil
.
GetFlagStringSlice
(
cmd
,
"image"
)
...
...
pkg/kubectl/cmd/create_deployment_test.go
View file @
a8c63b61
...
@@ -34,10 +34,11 @@ import (
...
@@ -34,10 +34,11 @@ import (
func
Test_generatorFromName
(
t
*
testing
.
T
)
{
func
Test_generatorFromName
(
t
*
testing
.
T
)
{
const
(
const
(
nonsenseName
=
"not-a-real-generator-name"
nonsenseName
=
"not-a-real-generator-name"
basicName
=
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
basicName
=
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
basicAppsName
=
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
basicAppsV1Beta1Name
=
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
deploymentName
=
"deployment-name"
basicAppsV1Name
=
cmdutil
.
DeploymentBasicAppsV1GeneratorName
deploymentName
=
"deployment-name"
)
)
imageNames
:=
[]
string
{
"image-1"
,
"image-2"
}
imageNames
:=
[]
string
{
"image-1"
,
"image-2"
}
...
@@ -58,7 +59,20 @@ func Test_generatorFromName(t *testing.T) {
...
@@ -58,7 +59,20 @@ func Test_generatorFromName(t *testing.T) {
assert
.
Equal
(
t
,
expectedGenerator
,
generator
)
assert
.
Equal
(
t
,
expectedGenerator
,
generator
)
}
}
generator
,
ok
=
generatorFromName
(
basicAppsName
,
imageNames
,
deploymentName
)
generator
,
ok
=
generatorFromName
(
basicAppsV1Beta1Name
,
imageNames
,
deploymentName
)
assert
.
True
(
t
,
ok
)
{
expectedGenerator
:=
&
kubectl
.
DeploymentBasicAppsGeneratorV1Beta1
{
BaseDeploymentGenerator
:
kubectl
.
BaseDeploymentGenerator
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
}
assert
.
Equal
(
t
,
expectedGenerator
,
generator
)
}
generator
,
ok
=
generatorFromName
(
basicAppsV1Name
,
imageNames
,
deploymentName
)
assert
.
True
(
t
,
ok
)
assert
.
True
(
t
,
ok
)
{
{
...
@@ -78,13 +92,13 @@ func TestCreateDeployment(t *testing.T) {
...
@@ -78,13 +92,13 @@ func TestCreateDeployment(t *testing.T) {
defer
tf
.
Cleanup
()
defer
tf
.
Cleanup
()
ns
:=
legacyscheme
.
Codecs
ns
:=
legacyscheme
.
Codecs
fakeDiscovery
:=
"{
\"
kind
\"
:
\"
APIResourceList
\"
,
\"
apiVersion
\"
:
\"
v1
\"
,
\"
groupVersion
\"
:
\"
apps/v1
\"
,
\"
resources
\"
:[{
\"
name
\"
:
\"
deployments
\"
,
\"
singularName
\"
:
\"\"
,
\"
namespaced
\"
:true,
\"
kind
\"
:
\"
Deployment
\"
,
\"
verbs
\"
:[
\"
create
\"
,
\"
delete
\"
,
\"
deletecollection
\"
,
\"
get
\"
,
\"
list
\"
,
\"
patch
\"
,
\"
update
\"
,
\"
watch
\"
],
\"
shortNames
\"
:[
\"
deploy
\"
],
\"
categories
\"
:[
\"
all
\"
]}]}"
tf
.
Client
=
&
fake
.
RESTClient
{
tf
.
Client
=
&
fake
.
RESTClient
{
NegotiatedSerializer
:
ns
,
NegotiatedSerializer
:
ns
,
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
Client
:
fake
.
CreateHTTPClient
(
func
(
req
*
http
.
Request
)
(
*
http
.
Response
,
error
)
{
return
&
http
.
Response
{
return
&
http
.
Response
{
StatusCode
:
http
.
StatusOK
,
StatusCode
:
http
.
StatusOK
,
Body
:
ioutil
.
NopCloser
(
bytes
.
NewBuffer
([]
byte
(
"{}"
))),
Body
:
ioutil
.
NopCloser
(
bytes
.
NewBuffer
([]
byte
(
fakeDiscovery
))),
},
nil
},
nil
}),
}),
}
}
...
@@ -97,7 +111,7 @@ func TestCreateDeployment(t *testing.T) {
...
@@ -97,7 +111,7 @@ func TestCreateDeployment(t *testing.T) {
cmd
.
Flags
()
.
Set
(
"output"
,
"name"
)
cmd
.
Flags
()
.
Set
(
"output"
,
"name"
)
cmd
.
Flags
()
.
Set
(
"image"
,
"hollywood/jonny.depp:v2"
)
cmd
.
Flags
()
.
Set
(
"image"
,
"hollywood/jonny.depp:v2"
)
cmd
.
Run
(
cmd
,
[]
string
{
depName
})
cmd
.
Run
(
cmd
,
[]
string
{
depName
})
expectedOutput
:=
"deployment.
extension
s/"
+
depName
+
"
\n
"
expectedOutput
:=
"deployment.
app
s/"
+
depName
+
"
\n
"
if
buf
.
String
()
!=
expectedOutput
{
if
buf
.
String
()
!=
expectedOutput
{
t
.
Errorf
(
"expected output: %s, but got: %s"
,
expectedOutput
,
buf
.
String
())
t
.
Errorf
(
"expected output: %s, but got: %s"
,
expectedOutput
,
buf
.
String
())
}
}
...
...
pkg/kubectl/cmd/run.go
View file @
a8c63b61
...
@@ -23,9 +23,6 @@ import (
...
@@ -23,9 +23,6 @@ import (
"github.com/docker/distribution/reference"
"github.com/docker/distribution/reference"
"github.com/spf13/cobra"
"github.com/spf13/cobra"
batchv1
"k8s.io/api/batch/v1"
batchv1beta1
"k8s.io/api/batch/v1beta1"
extensionsv1beta1
"k8s.io/api/extensions/v1beta1"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/errors"
"k8s.io/apimachinery/pkg/api/meta"
"k8s.io/apimachinery/pkg/api/meta"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
...
@@ -218,48 +215,28 @@ func RunRun(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *c
...
@@ -218,48 +215,28 @@ func RunRun(f cmdutil.Factory, cmdIn io.Reader, cmdOut, cmdErr io.Writer, cmd *c
generatorName
:=
cmdutil
.
GetFlagString
(
cmd
,
"generator"
)
generatorName
:=
cmdutil
.
GetFlagString
(
cmd
,
"generator"
)
schedule
:=
cmdutil
.
GetFlagString
(
cmd
,
"schedule"
)
schedule
:=
cmdutil
.
GetFlagString
(
cmd
,
"schedule"
)
if
len
(
schedule
)
!=
0
&&
len
(
generatorName
)
==
0
{
if
len
(
schedule
)
!=
0
&&
len
(
generatorName
)
==
0
{
hasResource
,
err
:=
cmdutil
.
HasResource
(
clientset
.
Discovery
(),
batchv1beta1
.
SchemeGroupVersion
.
WithResource
(
"cronjobs"
))
generatorName
=
cmdutil
.
CronJobV1Beta1GeneratorName
if
err
!=
nil
{
return
err
}
if
hasResource
{
generatorName
=
cmdutil
.
CronJobV1Beta1GeneratorName
}
else
{
generatorName
=
cmdutil
.
CronJobV2Alpha1GeneratorName
}
}
}
if
len
(
generatorName
)
==
0
{
if
len
(
generatorName
)
==
0
{
switch
restartPolicy
{
switch
restartPolicy
{
case
api
.
RestartPolicyAlways
:
case
api
.
RestartPolicyAlways
:
// TODO: we need to deprecate this along with extensions/v1beta1.Deployments
generatorName
=
cmdutil
.
DeploymentV1Beta1GeneratorName
// in favor of the new generator for apps/v1beta1.Deployments
hasResource
,
err
:=
cmdutil
.
HasResource
(
clientset
.
Discovery
(),
extensionsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
if
err
!=
nil
{
return
err
}
if
hasResource
{
generatorName
=
cmdutil
.
DeploymentV1Beta1GeneratorName
}
else
{
generatorName
=
cmdutil
.
RunV1GeneratorName
}
case
api
.
RestartPolicyOnFailure
:
case
api
.
RestartPolicyOnFailure
:
hasResource
,
err
:=
cmdutil
.
HasResource
(
clientset
.
Discovery
(),
batchv1
.
SchemeGroupVersion
.
WithResource
(
"jobs"
))
generatorName
=
cmdutil
.
JobV1GeneratorName
if
err
!=
nil
{
return
err
}
if
hasResource
{
generatorName
=
cmdutil
.
JobV1GeneratorName
}
else
{
generatorName
=
cmdutil
.
RunPodV1GeneratorName
}
case
api
.
RestartPolicyNever
:
case
api
.
RestartPolicyNever
:
generatorName
=
cmdutil
.
RunPodV1GeneratorName
generatorName
=
cmdutil
.
RunPodV1GeneratorName
}
}
}
generatorName
,
err
=
cmdutil
.
FallbackGeneratorNameIfNecessary
(
generatorName
,
clientset
.
Discovery
(),
cmdErr
)
// Falling back because the generator was not provided and the default one could be unavailable.
if
err
!=
nil
{
generatorNameTemp
,
err
:=
cmdutil
.
FallbackGeneratorNameIfNecessary
(
generatorName
,
clientset
.
Discovery
(),
cmdErr
)
return
err
if
err
!=
nil
{
return
err
}
if
generatorNameTemp
!=
generatorName
{
cmdutil
.
Warning
(
cmdErr
,
generatorName
,
generatorNameTemp
)
}
else
{
generatorName
=
generatorNameTemp
}
}
}
generators
:=
f
.
Generators
(
"run"
)
generators
:=
f
.
Generators
(
"run"
)
...
...
pkg/kubectl/cmd/util/factory_client_access.go
View file @
a8c63b61
...
@@ -465,6 +465,7 @@ const (
...
@@ -465,6 +465,7 @@ const (
DeploymentAppsV1Beta1GeneratorName
=
"deployment/apps.v1beta1"
DeploymentAppsV1Beta1GeneratorName
=
"deployment/apps.v1beta1"
DeploymentBasicV1Beta1GeneratorName
=
"deployment-basic/v1beta1"
DeploymentBasicV1Beta1GeneratorName
=
"deployment-basic/v1beta1"
DeploymentBasicAppsV1Beta1GeneratorName
=
"deployment-basic/apps.v1beta1"
DeploymentBasicAppsV1Beta1GeneratorName
=
"deployment-basic/apps.v1beta1"
DeploymentBasicAppsV1GeneratorName
=
"deployment-basic/apps.v1"
JobV1GeneratorName
=
"job/v1"
JobV1GeneratorName
=
"job/v1"
CronJobV2Alpha1GeneratorName
=
"cronjob/v2alpha1"
CronJobV2Alpha1GeneratorName
=
"cronjob/v2alpha1"
CronJobV1Beta1GeneratorName
=
"cronjob/v1beta1"
CronJobV1Beta1GeneratorName
=
"cronjob/v1beta1"
...
@@ -506,9 +507,10 @@ func DefaultGenerators(cmdName string) map[string]kubectl.Generator {
...
@@ -506,9 +507,10 @@ func DefaultGenerators(cmdName string) map[string]kubectl.Generator {
case
"deployment"
:
case
"deployment"
:
// Create Deployment has only StructuredGenerators and no
// Create Deployment has only StructuredGenerators and no
// param-based Generators.
// param-based Generators.
// The StructuredGenerators are as follows (as of 201
7-07-17
):
// The StructuredGenerators are as follows (as of 201
8-03-16
):
// DeploymentBasicV1Beta1GeneratorName -> kubectl.DeploymentBasicGeneratorV1
// DeploymentBasicV1Beta1GeneratorName -> kubectl.DeploymentBasicGeneratorV1
// DeploymentBasicAppsV1Beta1GeneratorName -> kubectl.DeploymentBasicAppsGeneratorV1
// DeploymentBasicAppsV1Beta1GeneratorName -> kubectl.DeploymentBasicAppsGeneratorV1Beta1
// DeploymentBasicAppsV1GeneratorName -> kubectl.DeploymentBasicAppsGeneratorV1
generator
=
map
[
string
]
kubectl
.
Generator
{}
generator
=
map
[
string
]
kubectl
.
Generator
{}
case
"run"
:
case
"run"
:
generator
=
map
[
string
]
kubectl
.
Generator
{
generator
=
map
[
string
]
kubectl
.
Generator
{
...
@@ -557,30 +559,68 @@ func FallbackGeneratorNameIfNecessary(
...
@@ -557,30 +559,68 @@ func FallbackGeneratorNameIfNecessary(
cmdErr
io
.
Writer
,
cmdErr
io
.
Writer
,
)
(
string
,
error
)
{
)
(
string
,
error
)
{
switch
generatorName
{
switch
generatorName
{
case
DeploymentAppsV1Beta1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
appsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
if
err
!=
nil
{
return
""
,
err
}
if
!
hasResource
{
return
FallbackGeneratorNameIfNecessary
(
DeploymentV1Beta1GeneratorName
,
discoveryClient
,
cmdErr
)
}
case
DeploymentV1Beta1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
extensionsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
if
err
!=
nil
{
return
""
,
err
}
if
!
hasResource
{
return
RunV1GeneratorName
,
nil
}
case
DeploymentBasicAppsV1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
appsv1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
if
err
!=
nil
{
return
""
,
err
}
if
!
hasResource
{
return
FallbackGeneratorNameIfNecessary
(
DeploymentBasicAppsV1Beta1GeneratorName
,
discoveryClient
,
cmdErr
)
}
case
DeploymentBasicAppsV1Beta1GeneratorName
:
case
DeploymentBasicAppsV1Beta1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
appsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
hasResource
,
err
:=
HasResource
(
discoveryClient
,
appsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
if
!
hasResource
{
if
!
hasResource
{
warning
(
cmdErr
,
DeploymentBasicAppsV1Beta1GeneratorName
,
DeploymentBasicV1Beta1GeneratorName
)
return
DeploymentBasicV1Beta1GeneratorName
,
nil
return
DeploymentBasicV1Beta1GeneratorName
,
nil
}
}
case
JobV1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
batchv1
.
SchemeGroupVersion
.
WithResource
(
"jobs"
))
if
err
!=
nil
{
return
""
,
err
}
if
!
hasResource
{
return
RunPodV1GeneratorName
,
nil
}
case
CronJobV1Beta1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
batchv1beta1
.
SchemeGroupVersion
.
WithResource
(
"cronjobs"
))
if
err
!=
nil
{
return
""
,
err
}
if
!
hasResource
{
return
FallbackGeneratorNameIfNecessary
(
CronJobV2Alpha1GeneratorName
,
discoveryClient
,
cmdErr
)
}
case
CronJobV2Alpha1GeneratorName
:
case
CronJobV2Alpha1GeneratorName
:
hasResource
,
err
:=
HasResource
(
discoveryClient
,
batchv2alpha1
.
SchemeGroupVersion
.
WithResource
(
"cronjobs"
))
hasResource
,
err
:=
HasResource
(
discoveryClient
,
batchv2alpha1
.
SchemeGroupVersion
.
WithResource
(
"cronjobs"
))
if
err
!=
nil
{
if
err
!=
nil
{
return
""
,
err
return
""
,
err
}
}
if
!
hasResource
{
if
!
hasResource
{
warning
(
cmdErr
,
CronJobV2Alpha1GeneratorName
,
JobV1GeneratorName
)
return
JobV1GeneratorName
,
nil
return
JobV1GeneratorName
,
nil
}
}
}
}
return
generatorName
,
nil
return
generatorName
,
nil
}
}
func
w
arning
(
cmdErr
io
.
Writer
,
newGeneratorName
,
oldGeneratorName
string
)
{
func
W
arning
(
cmdErr
io
.
Writer
,
newGeneratorName
,
oldGeneratorName
string
)
{
fmt
.
Fprintf
(
cmdErr
,
"WARNING: New
deployments
generator %q specified, "
+
fmt
.
Fprintf
(
cmdErr
,
"WARNING: New generator %q specified, "
+
"but it isn't available. "
+
"but it isn't available. "
+
"Falling back to %q.
\n
"
,
"Falling back to %q.
\n
"
,
newGeneratorName
,
newGeneratorName
,
...
...
pkg/kubectl/deployment.go
View file @
a8c63b61
...
@@ -20,6 +20,7 @@ import (
...
@@ -20,6 +20,7 @@ import (
"fmt"
"fmt"
"strings"
"strings"
appsv1
"k8s.io/api/apps/v1"
appsv1beta1
"k8s.io/api/apps/v1beta1"
appsv1beta1
"k8s.io/api/apps/v1beta1"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
extensionsv1beta1
"k8s.io/api/extensions/v1beta1"
extensionsv1beta1
"k8s.io/api/extensions/v1beta1"
...
@@ -28,7 +29,7 @@ import (
...
@@ -28,7 +29,7 @@ import (
)
)
// BaseDeploymentGenerator: implement the common functionality of
// BaseDeploymentGenerator: implement the common functionality of
// DeploymentBasicGeneratorV1 and DeploymentBasicAppsGeneratorV1. To reduce
// DeploymentBasicGeneratorV1
, DeploymentBasicAppsGeneratorV1Beta1
and DeploymentBasicAppsGeneratorV1. To reduce
// confusion, it's best to keep this struct in the same file as those
// confusion, it's best to keep this struct in the same file as those
// generators.
// generators.
type
BaseDeploymentGenerator
struct
{
type
BaseDeploymentGenerator
struct
{
...
@@ -117,7 +118,37 @@ func (s *DeploymentBasicGeneratorV1) StructuredGenerate() (runtime.Object, error
...
@@ -117,7 +118,37 @@ func (s *DeploymentBasicGeneratorV1) StructuredGenerate() (runtime.Object, error
},
err
},
err
}
}
// DeploymentBasicAppsGeneratorV1 supports stable generation of a deployment under apps/v1beta1 endpoint
// DeploymentBasicAppsGeneratorV1Beta1 supports stable generation of a deployment under apps/v1beta1 endpoint
type
DeploymentBasicAppsGeneratorV1Beta1
struct
{
BaseDeploymentGenerator
}
// Ensure it supports the generator pattern that uses parameters specified during construction
var
_
StructuredGenerator
=
&
DeploymentBasicAppsGeneratorV1Beta1
{}
// StructuredGenerate outputs a deployment object using the configured fields
func
(
s
*
DeploymentBasicAppsGeneratorV1Beta1
)
StructuredGenerate
()
(
runtime
.
Object
,
error
)
{
podSpec
,
labels
,
selector
,
err
:=
s
.
structuredGenerate
()
one
:=
int32
(
1
)
return
&
appsv1beta1
.
Deployment
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
s
.
Name
,
Labels
:
labels
,
},
Spec
:
appsv1beta1
.
DeploymentSpec
{
Replicas
:
&
one
,
Selector
:
&
selector
,
Template
:
v1
.
PodTemplateSpec
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Labels
:
labels
,
},
Spec
:
podSpec
,
},
},
},
err
}
// DeploymentBasicAppsGeneratorV1 supports stable generation of a deployment under apps/v1 endpoint
type
DeploymentBasicAppsGeneratorV1
struct
{
type
DeploymentBasicAppsGeneratorV1
struct
{
BaseDeploymentGenerator
BaseDeploymentGenerator
}
}
...
@@ -129,12 +160,12 @@ var _ StructuredGenerator = &DeploymentBasicAppsGeneratorV1{}
...
@@ -129,12 +160,12 @@ var _ StructuredGenerator = &DeploymentBasicAppsGeneratorV1{}
func
(
s
*
DeploymentBasicAppsGeneratorV1
)
StructuredGenerate
()
(
runtime
.
Object
,
error
)
{
func
(
s
*
DeploymentBasicAppsGeneratorV1
)
StructuredGenerate
()
(
runtime
.
Object
,
error
)
{
podSpec
,
labels
,
selector
,
err
:=
s
.
structuredGenerate
()
podSpec
,
labels
,
selector
,
err
:=
s
.
structuredGenerate
()
one
:=
int32
(
1
)
one
:=
int32
(
1
)
return
&
appsv1
beta1
.
Deployment
{
return
&
appsv1
.
Deployment
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
s
.
Name
,
Name
:
s
.
Name
,
Labels
:
labels
,
Labels
:
labels
,
},
},
Spec
:
appsv1
beta1
.
DeploymentSpec
{
Spec
:
appsv1
.
DeploymentSpec
{
Replicas
:
&
one
,
Replicas
:
&
one
,
Selector
:
&
selector
,
Selector
:
&
selector
,
Template
:
v1
.
PodTemplateSpec
{
Template
:
v1
.
PodTemplateSpec
{
...
...
pkg/kubectl/deployment_test.go
View file @
a8c63b61
...
@@ -20,8 +20,8 @@ import (
...
@@ -20,8 +20,8 @@ import (
"reflect"
"reflect"
"testing"
"testing"
appsv1
"k8s.io/api/apps/v1"
"k8s.io/api/core/v1"
"k8s.io/api/core/v1"
extensionsv1beta1
"k8s.io/api/extensions/v1beta1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
)
)
...
@@ -31,19 +31,19 @@ func TestDeploymentBasicGenerate(t *testing.T) {
...
@@ -31,19 +31,19 @@ func TestDeploymentBasicGenerate(t *testing.T) {
name
string
name
string
deploymentName
string
deploymentName
string
images
[]
string
images
[]
string
expected
*
extensionsv1beta
1
.
Deployment
expected
*
appsv
1
.
Deployment
expectErr
bool
expectErr
bool
}{
}{
{
{
name
:
"deployment name and images ok"
,
name
:
"deployment name and images ok"
,
deploymentName
:
"images-name-ok"
,
deploymentName
:
"images-name-ok"
,
images
:
[]
string
{
"nn/image1"
,
"registry/nn/image2"
,
"nn/image3:tag"
,
"nn/image4@digest"
,
"nn/image5@sha256:digest"
},
images
:
[]
string
{
"nn/image1"
,
"registry/nn/image2"
,
"nn/image3:tag"
,
"nn/image4@digest"
,
"nn/image5@sha256:digest"
},
expected
:
&
extensionsv1beta
1
.
Deployment
{
expected
:
&
appsv
1
.
Deployment
{
ObjectMeta
:
metav1
.
ObjectMeta
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"images-name-ok"
,
Name
:
"images-name-ok"
,
Labels
:
map
[
string
]
string
{
"app"
:
"images-name-ok"
},
Labels
:
map
[
string
]
string
{
"app"
:
"images-name-ok"
},
},
},
Spec
:
extensionsv1beta
1
.
DeploymentSpec
{
Spec
:
appsv
1
.
DeploymentSpec
{
Replicas
:
&
one
,
Replicas
:
&
one
,
Selector
:
&
metav1
.
LabelSelector
{
Selector
:
&
metav1
.
LabelSelector
{
MatchLabels
:
map
[
string
]
string
{
"app"
:
"images-name-ok"
},
MatchLabels
:
map
[
string
]
string
{
"app"
:
"images-name-ok"
},
...
@@ -83,7 +83,7 @@ func TestDeploymentBasicGenerate(t *testing.T) {
...
@@ -83,7 +83,7 @@ func TestDeploymentBasicGenerate(t *testing.T) {
},
},
}
}
for
_
,
test
:=
range
tests
{
for
_
,
test
:=
range
tests
{
generator
:=
&
DeploymentBasicGeneratorV1
{
generator
:=
&
DeploymentBasic
Apps
GeneratorV1
{
BaseDeploymentGenerator
{
BaseDeploymentGenerator
{
Name
:
test
.
deploymentName
,
Name
:
test
.
deploymentName
,
Images
:
test
.
images
,
Images
:
test
.
images
,
...
@@ -96,8 +96,8 @@ func TestDeploymentBasicGenerate(t *testing.T) {
...
@@ -96,8 +96,8 @@ func TestDeploymentBasicGenerate(t *testing.T) {
if
test
.
expectErr
&&
err
!=
nil
{
if
test
.
expectErr
&&
err
!=
nil
{
continue
continue
}
}
if
!
reflect
.
DeepEqual
(
obj
.
(
*
extensionsv1beta
1
.
Deployment
),
test
.
expected
)
{
if
!
reflect
.
DeepEqual
(
obj
.
(
*
appsv
1
.
Deployment
),
test
.
expected
)
{
t
.
Errorf
(
"test: %v
\n
expected:
\n
%#v
\n
saw:
\n
%#v"
,
test
.
name
,
test
.
expected
,
obj
.
(
*
extensionsv1beta
1
.
Deployment
))
t
.
Errorf
(
"test: %v
\n
expected:
\n
%#v
\n
saw:
\n
%#v"
,
test
.
name
,
test
.
expected
,
obj
.
(
*
appsv
1
.
Deployment
))
}
}
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment