Skip to content

Instantly share code, notes, and snippets.

@fprimex
Created April 3, 2020 14:07
Show Gist options
  • Save fprimex/203df53a9a977b99491e2963dbd2b641 to your computer and use it in GitHub Desktop.
Save fprimex/203df53a9a977b99491e2963dbd2b641 to your computer and use it in GitHub Desktop.
// Copyright © 2018 Brian Shumate <brian@brianshumate.com>
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
// 1. Redistributions of source code must retain the above copyright notice,
// this list of conditions and the following disclaimer.
//
// 2. Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
package main
import (
"fmt"
"os"
"strings"
)
func IsHelp(argument string) bool {
switch argument {
case
"?",
"/?",
"h",
"-h",
"/h",
"help",
"-help",
"--help":
return true
}
return false
}
func IsProduct(product string) bool {
switch product {
case
"consul",
"consul-template",
"envconsul",
"nomad",
"packer",
"sentinel",
"terraform",
"vagrant",
"vault":
return true
}
return false
}
func main() {
args := os.Args[1:]
switch len(args) {
case 0:
fmt.Println("show info")
fmt.Println("if nothing installed, show or mention help command")
case 1:
if IsHelp(args[0]) {
fmt.Println("show help")
os.Exit(0)
}
if IsProduct(args[0]) {
fmt.Println(fmt.Sprintf("install and switch to latest %s", args[0]))
} else {
fmt.Println(fmt.Sprintf("invalid product: %s", args[0]))
os.Exit(1)
}
case 2:
if IsHelp(args[0]) {
fmt.Println("show help")
os.Exit(1)
}
if IsProduct(args[0]) {
if strings.HasPrefix(args[1], "-") {
fmt.Println(fmt.Sprintf("uninstall %s version %s", args[0], args[1]))
} else {
fmt.Println(fmt.Sprintf("install and switch to %s version %s", args[0], args[1]))
}
} else {
fmt.Println(fmt.Sprintf("invalid product: %s", args[0]))
os.Exit(1)
}
default:
fmt.Println("show usage")
os.Exit(1)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment