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 (
"io"
"github.com/spf13/cobra"
"k8s.io/kubernetes/pkg/kubectl"
2016-10-07 22:24:42 +00:00
"k8s.io/kubernetes/pkg/kubectl/cmd/templates"
2016-02-19 02:24:21 +00:00
cmdutil "k8s.io/kubernetes/pkg/kubectl/cmd/util"
2017-07-07 04:04:11 +00:00
"k8s.io/kubernetes/pkg/kubectl/util/i18n"
2016-02-19 02:24:21 +00:00
)
2016-05-20 17:49:56 +00:00
var (
2017-03-15 03:49:10 +00:00
configMapLong = templates . LongDesc ( i18n . T ( `
2016-05-20 17:49:56 +00:00
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 ,
2017-03-15 03:49:10 +00:00
symlinks , devices , pipes , etc ) . ` ) )
2016-02-19 02:24:21 +00:00
2017-03-15 03:49:10 +00:00
configMapExample = templates . Examples ( i18n . T ( `
2017-02-15 08:57:38 +00:00
# Create a new configmap named my - config based on folder bar
2016-05-20 17:49:56 +00:00
kubectl create configmap my - config -- from - file = path / to / bar
2016-02-19 02:24:21 +00:00
2017-02-15 08:57:38 +00:00
# Create a new configmap named my - config with specified keys instead of file basenames on disk
2016-05-20 17:49:56 +00:00
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-12-09 17:35:23 +00:00
kubectl create configmap my - config -- from - literal = key1 = config1 -- from - literal = key2 = config2
# Create a new configmap named my - config from the key = value pairs in the file
kubectl create configmap my - config -- from - file = path / to / bar
# Create a new configmap named my - config from an env file
2017-03-15 03:49:10 +00:00
kubectl create configmap my - config -- from - env - file = path / to / bar . env ` ) )
2016-02-19 02:24:21 +00:00
)
// ConfigMap is a command to ease creating ConfigMaps.
2016-10-13 00:18:39 +00:00
func NewCmdCreateConfigMap ( f cmdutil . Factory , cmdOut io . Writer ) * cobra . Command {
2016-02-19 02:24:21 +00:00
cmd := & cobra . Command {
2017-10-11 06:26:02 +00:00
Use : "configmap NAME [--from-file=[key=]source] [--from-literal=key1=value1] [--dry-run]" ,
DisableFlagsInUseLine : true ,
Aliases : [ ] string { "cm" } ,
Short : i18n . T ( "Create a configmap from a local file, directory or literal value" ) ,
Long : configMapLong ,
Example : configMapExample ,
2016-02-19 02:24:21 +00:00
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 )
2017-02-15 08:57:38 +00:00
cmd . Flags ( ) . StringSlice ( "from-file" , [ ] string { } , "Key file can be specified using its file path, in which case file basename will be used as configmap key, or optionally with a key and file path, in which case the given key will be used. Specifying a directory will iterate each named file in the directory whose basename 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-12-09 17:35:23 +00:00
cmd . Flags ( ) . String ( "from-env-file" , "" , "Specify the path to a file to read lines of key=val pairs to create a configmap (i.e. a Docker .env file)." )
2017-07-28 17:18:08 +00:00
cmd . Flags ( ) . Bool ( "append-hash" , false , "Append a hash of the configmap to its name." )
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-10-13 00:18:39 +00:00
func CreateConfigMap ( f cmdutil . Factory , cmdOut io . Writer , cmd * cobra . Command , args [ ] string ) error {
2016-02-19 02:24:21 +00:00
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-12-09 17:35:23 +00:00
EnvFileSource : cmdutil . GetFlagString ( cmd , "from-env-file" ) ,
2017-07-28 17:18:08 +00:00
AppendHash : cmdutil . GetFlagBool ( cmd , "append-hash" ) ,
2016-02-19 02:24:21 +00:00
}
default :
2017-05-25 19:44:43 +00:00
return errUnsupportedGenerator ( cmd , generatorName )
2016-02-19 02:24:21 +00:00
}
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" ) ,
} )
}