2016-02-19 02:24:21 +00:00
/ *
2016-06-03 00:25:58 +00:00
Copyright 2016 The Kubernetes Authors .
2016-02-19 02:24:21 +00:00
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"
2016-05-20 17:49:56 +00:00
"github.com/renstrom/dedent"
2016-02-19 02:24:21 +00:00
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl"
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
)
2016-05-20 17:49:56 +00:00
var (
configMapLong = dedent . Dedent ( `
Create a configmap based on a file , directory , or specified literal value .
2016-02-19 02:24:21 +00:00
2016-05-20 17:49:56 +00:00
A single configmap may package one or more key / value pairs .
2016-02-19 02:24:21 +00:00
2016-05-20 17:49:56 +00:00
When creating a configmap based on a file , the key will default to the basename of the file , and the value will
default to the file content . If the basename is an invalid key , you may specify an alternate key .
2016-02-19 02:24:21 +00:00
2016-05-20 17:49:56 +00:00
When creating a configmap based on a directory , each file whose basename is a valid key in the directory will be
packaged into the configmap . Any directory entries except regular files are ignored ( e . g . subdirectories ,
symlinks , devices , pipes , etc ) .
` )
2016-02-19 02:24:21 +00:00
2016-05-20 17:49:56 +00:00
configMapExample = dedent . Dedent ( `
# Create a new configmap named my - config with keys for each file in folder bar
kubectl create configmap my - config -- from - file = path / to / bar
2016-02-19 02:24:21 +00:00
2016-05-20 17:49:56 +00:00
# Create a new configmap named my - config with specified keys instead of names on disk
kubectl create configmap my - config -- from - file = key1 = / path / to / bar / file1 . txt -- from - file = key2 = / path / to / bar / file2 . txt
2016-02-19 02:24:21 +00:00
2016-06-07 17:38:04 +00:00
# Create a new configmap named my - config with key1 = config1 and key2 = config2
2016-05-20 17:49:56 +00:00
kubectl create configmap my - config -- from - literal = key1 = config1 -- from - literal = key2 = config2 ` )
2016-02-19 02:24:21 +00:00
)
// ConfigMap is a command to ease creating ConfigMaps.
func NewCmdCreateConfigMap ( f * cmdutil . Factory , cmdOut io . Writer ) * cobra . Command {
cmd := & cobra . Command {
2016-03-21 18:17:23 +00:00
Use : "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]" ,
2016-08-04 02:35:15 +00:00
Aliases : [ ] string { "cm" } ,
2016-06-07 17:38:04 +00:00
Short : "Create a configmap from a local file, directory or literal value" ,
2016-02-19 02:24:21 +00:00
Long : configMapLong ,
Example : configMapExample ,
Run : func ( cmd * cobra . Command , args [ ] string ) {
err := CreateConfigMap ( f , cmdOut , cmd , args )
cmdutil . CheckErr ( err )
} ,
}
cmdutil . AddApplyAnnotationFlags ( cmd )
cmdutil . AddValidateFlags ( cmd )
cmdutil . AddPrinterFlags ( cmd )
cmdutil . AddGeneratorFlags ( cmd , cmdutil . ConfigMapV1GeneratorName )
cmd . Flags ( ) . StringSlice ( "from-file" , [ ] string { } , "Key files can be specified using their file path, in which case a default name will be given to them, or optionally with a name and file path, in which case the given name will be used. Specifying a directory will iterate each named file in the directory that is a valid configmap key." )
2016-09-27 11:21:46 +00:00
cmd . Flags ( ) . StringArray ( "from-literal" , [ ] string { } , "Specify a key and literal value to insert in configmap (i.e. mykey=somevalue)" )
2016-02-19 02:24:21 +00:00
return cmd
}
2016-03-21 18:17:23 +00:00
// CreateConfigMap is the implementation of the create configmap command.
2016-02-19 02:24:21 +00:00
func CreateConfigMap ( f * cmdutil . Factory , cmdOut io . Writer , cmd * cobra . Command , args [ ] string ) error {
name , err := NameFromCommandArgs ( cmd , args )
if err != nil {
return err
}
var generator kubectl . StructuredGenerator
switch generatorName := cmdutil . GetFlagString ( cmd , "generator" ) ; generatorName {
case cmdutil . ConfigMapV1GeneratorName :
generator = & kubectl . ConfigMapGeneratorV1 {
Name : name ,
FileSources : cmdutil . GetFlagStringSlice ( cmd , "from-file" ) ,
2016-09-27 11:21:46 +00:00
LiteralSources : cmdutil . GetFlagStringArray ( cmd , "from-literal" ) ,
2016-02-19 02:24:21 +00:00
}
default :
return cmdutil . UsageError ( cmd , fmt . Sprintf ( "Generator: %s not supported." , generatorName ) )
}
return RunCreateSubcommand ( f , cmd , cmdOut , & CreateSubcommandOptions {
Name : name ,
StructuredGenerator : generator ,
2016-05-11 00:26:39 +00:00
DryRun : cmdutil . GetDryRunFlag ( cmd ) ,
2016-02-19 02:24:21 +00:00
OutputFormat : cmdutil . GetFlagString ( cmd , "output" ) ,
} )
}