2016-08-08 03:24:30 +00:00
/ *
Copyright 2016 The Kubernetes Authors .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package cmd
import (
"fmt"
"io"
"github.com/spf13/cobra"
2017-03-08 10:11:29 +00:00
appsv1beta1 "k8s.io/kubernetes/pkg/apis/apps/v1beta1"
2016-08-08 03:24:30 +00:00
"k8s.io/kubernetes/pkg/kubectl"
2016-10-07 22:24:42 +00:00
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
2016-08-08 03:24:30 +00:00
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2017-01-25 01:00:32 +00:00
"k8s.io/kubernetes/pkg/util/i18n"
2016-08-08 03:24:30 +00:00
)
var (
2017-03-15 03:49:10 +00:00
deploymentLong = templates . LongDesc ( i18n . T ( `
Create a deployment with the specified name . ` ) )
2016-08-08 03:24:30 +00:00
2017-03-15 03:49:10 +00:00
deploymentExample = templates . Examples ( i18n . T ( `
2016-10-07 22:24:42 +00:00
# Create a new deployment named my - dep that runs the busybox image .
2017-03-15 03:49:10 +00:00
kubectl create deployment my - dep -- image = busybox ` ) )
2016-08-08 03:24:30 +00:00
)
// NewCmdCreateDeployment is a macro command to create a new deployment
2017-03-08 10:11:29 +00:00
func NewCmdCreateDeployment ( f cmdutil . Factory , cmdOut , cmdErr io . Writer ) * cobra . Command {
2016-08-08 03:24:30 +00:00
cmd := & cobra . Command {
Use : "deployment NAME --image=image [--dry-run]" ,
2016-09-05 07:28:10 +00:00
Aliases : [ ] string { "deploy" } ,
2017-01-25 01:00:32 +00:00
Short : i18n . T ( "Create a deployment with the specified name." ) ,
2016-08-08 03:24:30 +00:00
Long : deploymentLong ,
Example : deploymentExample ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
2017-03-08 10:11:29 +00:00
err := CreateDeployment ( f , cmdOut , cmdErr , cmd , args )
2016-08-08 03:24:30 +00:00
cmdutil . CheckErr ( err )
} ,
}
cmdutil . AddApplyAnnotationFlags ( cmd )
cmdutil . AddValidateFlags ( cmd )
cmdutil . AddPrinterFlags ( cmd )
cmdutil . AddGeneratorFlags ( cmd , cmdutil . DeploymentBasicV1Beta1GeneratorName )
cmd . Flags ( ) . StringSlice ( "image" , [ ] string { } , "Image name to run." )
cmd . MarkFlagRequired ( "image" )
return cmd
}
// CreateDeployment implements the behavior to run the create deployment command
2017-03-08 10:11:29 +00:00
func CreateDeployment ( f cmdutil . Factory , cmdOut , cmdErr io . Writer , cmd * cobra . Command , args [ ] string ) error {
2016-08-08 03:24:30 +00:00
name , err := NameFromCommandArgs ( cmd , args )
if err != nil {
return err
}
2017-03-08 10:11:29 +00:00
clientset , err := f . ClientSet ( )
if err != nil {
return err
}
resourcesList , err := clientset . Discovery ( ) . ServerResources ( )
// ServerResources ignores errors for old servers do not expose discovery
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
}
2016-08-08 03:24:30 +00:00
var generator kubectl . StructuredGenerator
2017-03-08 10:11:29 +00:00
switch generatorName {
case cmdutil . DeploymentBasicAppsV1Beta1GeneratorName :
generator = & kubectl . DeploymentBasicAppsGeneratorV1 { Name : name , Images : cmdutil . GetFlagStringSlice ( cmd , "image" ) }
2016-08-08 03:24:30 +00:00
case cmdutil . DeploymentBasicV1Beta1GeneratorName :
generator = & kubectl . DeploymentBasicGeneratorV1 { Name : name , Images : cmdutil . GetFlagStringSlice ( cmd , "image" ) }
default :
return cmdutil . UsageError ( cmd , fmt . Sprintf ( "Generator: %s not supported." , generatorName ) )
}
return RunCreateSubcommand ( f , cmd , cmdOut , & CreateSubcommandOptions {
Name : name ,
StructuredGenerator : generator ,
DryRun : cmdutil . GetDryRunFlag ( cmd ) ,
OutputFormat : cmdutil . GetFlagString ( cmd , "output" ) ,
} )
}