go.etcd.io/etcd@v3.3.27+incompatible/etcdctl/ctlv2/command/mkdir_command.go (about) 1 // Copyright 2015 The etcd Authors 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package command 16 17 import ( 18 "errors" 19 "time" 20 21 "github.com/coreos/etcd/client" 22 "github.com/urfave/cli" 23 ) 24 25 // NewMakeDirCommand returns the CLI command for "mkdir". 26 func NewMakeDirCommand() cli.Command { 27 return cli.Command{ 28 Name: "mkdir", 29 Usage: "make a new directory", 30 ArgsUsage: "<key>", 31 Flags: []cli.Flag{ 32 cli.IntFlag{Name: "ttl", Value: 0, Usage: "key time-to-live in seconds"}, 33 }, 34 Action: func(c *cli.Context) error { 35 mkdirCommandFunc(c, mustNewKeyAPI(c), client.PrevNoExist) 36 return nil 37 }, 38 } 39 } 40 41 // mkdirCommandFunc executes the "mkdir" command. 42 func mkdirCommandFunc(c *cli.Context, ki client.KeysAPI, prevExist client.PrevExistType) { 43 if len(c.Args()) == 0 { 44 handleError(c, ExitBadArgs, errors.New("key required")) 45 } 46 47 key := c.Args()[0] 48 ttl := c.Int("ttl") 49 50 ctx, cancel := contextWithTotalTimeout(c) 51 resp, err := ki.Set(ctx, key, "", &client.SetOptions{TTL: time.Duration(ttl) * time.Second, Dir: true, PrevExist: prevExist}) 52 cancel() 53 if err != nil { 54 handleError(c, ExitServerError, err) 55 } 56 if c.GlobalString("output") != "simple" { 57 printResponseKey(resp, c.GlobalString("output")) 58 } 59 }