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
b693c910
Commit
b693c910
authored
Jun 16, 2017
by
Alexander Campbell
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
cmd/create_deployment: refactor & test long function
parent
d8a939d1
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
105 additions
and
17 deletions
+105
-17
create_deployment.go
pkg/kubectl/cmd/create_deployment.go
+75
-17
create_deployment_test.go
pkg/kubectl/cmd/create_deployment_test.go
+30
-0
No files found.
pkg/kubectl/cmd/create_deployment.go
View file @
b693c910
...
...
@@ -23,6 +23,7 @@ import (
"github.com/spf13/cobra"
appsv1beta1
"k8s.io/api/apps/v1beta1"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/kubernetes/pkg/kubectl"
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
...
...
@@ -62,8 +63,69 @@ func NewCmdCreateDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer) *cobra.
return
cmd
}
func
createDeployment
(
f
cmdutil
.
Factory
,
cmdOut
,
cmdErr
io
.
Writer
,
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
name
,
err
:=
NameFromCommandArgs
(
cmd
,
args
)
// fallbackGeneratorNameIfNecessary returns the name of the old generator
// (v1beta1) if server does not support apps/v1beta1 deployments. Otherwise, the
// generator string is returned unchanged.
//
// If the generator name is changed, print a warning message to let the user
// know.
func
fallbackGeneratorNameIfNecessary
(
generatorName
string
,
resourcesList
[]
*
metav1
.
APIResourceList
,
cmdErr
io
.
Writer
,
)
string
{
if
generatorName
==
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
&&
!
contains
(
resourcesList
,
appsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
{
fmt
.
Fprintf
(
cmdErr
,
"WARNING: New deployments generator %q specified, "
+
"but apps/v1beta1.Deployments are not available. "
+
"Falling back to %q.
\n
"
,
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
,
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
,
)
return
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
}
return
generatorName
}
// generatorFromName returns the appropriate StructuredGenerator based on the
// generatorName. If the generatorName is unrecognized, then return (nil,
// false).
func
generatorFromName
(
generatorName
string
,
imageNames
[]
string
,
deploymentName
string
,
)
(
kubectl
.
StructuredGenerator
,
bool
)
{
switch
generatorName
{
case
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
:
return
&
kubectl
.
DeploymentBasicAppsGeneratorV1
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
true
case
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
:
return
&
kubectl
.
DeploymentBasicGeneratorV1
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
true
}
return
nil
,
false
}
// createDeployment
// 1. Reads user config values from Cobra.
// 2. Sets up the correct Generator object.
// 3. Calls RunCreateSubcommand.
func
createDeployment
(
f
cmdutil
.
Factory
,
cmdOut
,
cmdErr
io
.
Writer
,
cmd
*
cobra
.
Command
,
args
[]
string
)
error
{
deploymentName
,
err
:=
NameFromCommandArgs
(
cmd
,
args
)
if
err
!=
nil
{
return
err
}
...
...
@@ -77,25 +139,21 @@ func createDeployment(f cmdutil.Factory, cmdOut, cmdErr io.Writer, cmd *cobra.Co
if
err
!=
nil
{
return
fmt
.
Errorf
(
"failed to discover supported resources: %v"
,
err
)
}
generatorName
:=
cmdutil
.
GetFlagString
(
cmd
,
"generator"
)
// fallback to the old generator if server does not support apps/v1beta1 deployments
if
generatorName
==
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
&&
!
contains
(
resourcesList
,
appsv1beta1
.
SchemeGroupVersion
.
WithResource
(
"deployments"
))
{
fmt
.
Fprintf
(
cmdErr
,
"WARNING: New deployments generator specified (%s), but apps/v1beta1.Deployments are not available, falling back to the old one (%s).
\n
"
,
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
,
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
)
generatorName
=
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
}
var
generator
kubectl
.
StructuredGenerator
switch
generatorName
{
case
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
:
generator
=
&
kubectl
.
DeploymentBasicAppsGeneratorV1
{
Name
:
name
,
Images
:
cmdutil
.
GetFlagStringSlice
(
cmd
,
"image"
)}
case
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
:
generator
=
&
kubectl
.
DeploymentBasicGeneratorV1
{
Name
:
name
,
Images
:
cmdutil
.
GetFlagStringSlice
(
cmd
,
"image"
)}
default
:
// It is possible we have to modify the user-provided generator name if
// the server does not have support for the requested generator.
generatorName
=
fallbackGeneratorNameIfNecessary
(
generatorName
,
resourcesList
,
cmdErr
)
imageNames
:=
cmdutil
.
GetFlagStringSlice
(
cmd
,
"image"
)
generator
,
ok
:=
generatorFromName
(
generatorName
,
imageNames
,
deploymentName
)
if
!
ok
{
return
errUnsupportedGenerator
(
cmd
,
generatorName
)
}
return
RunCreateSubcommand
(
f
,
cmd
,
cmdOut
,
&
CreateSubcommandOptions
{
Name
:
n
ame
,
Name
:
deploymentN
ame
,
StructuredGenerator
:
generator
,
DryRun
:
cmdutil
.
GetDryRunFlag
(
cmd
),
OutputFormat
:
cmdutil
.
GetFlagString
(
cmd
,
"output"
),
...
...
pkg/kubectl/cmd/create_deployment_test.go
View file @
b693c910
...
...
@@ -27,9 +27,39 @@ import (
restclient
"k8s.io/client-go/rest"
"k8s.io/client-go/rest/fake"
"k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/kubectl"
cmdtesting
"k8s.io/kubernetes/pkg/kubectl/cmd/testing"
cmdutil
"k8s.io/kubernetes/pkg/kubectl/cmd/util"
)
func
Test_generatorFromName
(
t
*
testing
.
T
)
{
const
(
nonsenseName
=
"not-a-real-generator-name"
basicName
=
cmdutil
.
DeploymentBasicV1Beta1GeneratorName
basicAppsName
=
cmdutil
.
DeploymentBasicAppsV1Beta1GeneratorName
deploymentName
=
"deployment-name"
)
imageNames
:=
[]
string
{
"image-1"
,
"image-2"
}
generator
,
ok
:=
generatorFromName
(
nonsenseName
,
imageNames
,
deploymentName
)
assert
.
Nil
(
t
,
generator
)
assert
.
False
(
t
,
ok
)
generator
,
ok
=
generatorFromName
(
basicName
,
imageNames
,
deploymentName
)
assert
.
True
(
t
,
ok
)
assert
.
Equal
(
t
,
&
kubectl
.
DeploymentBasicGeneratorV1
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
generator
)
generator
,
ok
=
generatorFromName
(
basicAppsName
,
imageNames
,
deploymentName
)
assert
.
True
(
t
,
ok
)
assert
.
Equal
(
t
,
&
kubectl
.
DeploymentBasicAppsGeneratorV1
{
Name
:
deploymentName
,
Images
:
imageNames
,
},
generator
)
}
func
TestCreateDeployment
(
t
*
testing
.
T
)
{
depName
:=
"jonny-dep"
f
,
tf
,
_
,
ns
:=
cmdtesting
.
NewAPIFactory
()
...
...
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