github.com/coreos/mantle@v0.13.0/cmd/ore/do/delete-keys.go (about) 1 // Copyright 2018 CoreOS, Inc. 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 do 16 17 import ( 18 "context" 19 "fmt" 20 "os" 21 22 "github.com/spf13/cobra" 23 ) 24 25 var ( 26 cmdDeleteKeys = &cobra.Command{ 27 Use: "delete-keys <key>...", 28 Short: "Delete DigitalOcean SSH keys", 29 RunE: runDeleteKeys, 30 } 31 ) 32 33 func init() { 34 DO.AddCommand(cmdDeleteKeys) 35 } 36 37 func runDeleteKeys(cmd *cobra.Command, args []string) error { 38 if len(args) == 0 { 39 fmt.Fprintf(os.Stderr, "Specify at least one key.\n") 40 os.Exit(2) 41 } 42 43 names := map[string]bool{} 44 for _, arg := range args { 45 names[arg] = true 46 } 47 48 ctx := context.Background() 49 50 keys, err := API.ListKeys(ctx) 51 if err != nil { 52 fmt.Fprintf(os.Stderr, "Couldn't list keys: %v\n", err) 53 os.Exit(1) 54 } 55 56 exit := 0 57 for _, key := range keys { 58 if names[key.Name] { 59 if err := API.DeleteKey(ctx, key.ID); err != nil { 60 fmt.Fprintf(os.Stderr, "Couldn't delete key: %v\n", key.Name) 61 exit = 1 62 } 63 delete(names, key.Name) 64 } 65 } 66 67 for name := range names { 68 fmt.Fprintf(os.Stderr, "No such key: %v\n", name) 69 exit = 1 70 } 71 72 os.Exit(exit) 73 return nil 74 }