diff --git a/cmd/main.go b/cmd/main.go index 1320e3b..3e4b0d8 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -6,13 +6,16 @@ import ( "git.linuxrocker.com/mattburchett/go_tab-magic/pkg/config" "git.linuxrocker.com/mattburchett/go_tab-magic/pkg/resolver" + "git.linuxrocker.com/mattburchett/go_tab-magic/pkg/shell" ) func main() { var c string + var user string var debug bool flag.StringVar(&c, "config", "", "Configuration to load") + flag.StringVar(&user, "user", "", "user for aliases") flag.BoolVar(&debug, "debug", false, "Enables Debugging Mode") flag.Parse() @@ -21,10 +24,15 @@ func main() { log.Fatal("You need to specify a configuration file.") } + if user == "" { + log.Fatal("Username is not specified.") + } + cfg, err := config.GetConfig(c, debug) if err != nil { log.Fatal(err) } - resolver.PerformZoneTransfer(cfg) + data := resolver.PerformZoneTransfer(cfg) + shell.CreateShellAliases(data, user, cfg) } diff --git a/config.json b/config.json index 98a04ce..fff3e74 100644 --- a/config.json +++ b/config.json @@ -1,5 +1,7 @@ { "resolver": "172.19.0.5", "resolverPort": 53, - "domains": [ "kc.linuxrocker.com"] + "domains": [ "kc.linuxrocker.com"], + "jumpHost": "jump01.kc.linuxrocker.com", + "splitString": ".linuxrocker" } \ No newline at end of file diff --git a/pkg/config/config.go b/pkg/config/config.go index 2b35286..852fb82 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -12,6 +12,8 @@ type Config struct { Resolver string `json:"resolver"` ResolverPort int `json:"resolverPort"` Domains []string `json:"domains"` + JumpHost string `json:"jumpHost"` + SplitString string `json:"splitString"` } //GetConfig gets the configuration values for the api using the file in the supplied configPath. diff --git a/pkg/resolver/resolver.go b/pkg/resolver/resolver.go index 64efb6a..8827aa7 100644 --- a/pkg/resolver/resolver.go +++ b/pkg/resolver/resolver.go @@ -30,7 +30,7 @@ func lookupName(fqdn, serverAddr string) (string, error) { return "", errors.New("no A record returned") } -func PerformZoneTransfer(config config.Config) { +func PerformZoneTransfer(config config.Config) []string { data := make([]string, 0) // Do the transfer @@ -73,10 +73,13 @@ func PerformZoneTransfer(config config.Config) { } } fmt.Println(data) - resultsToJSON(data) + // resultsToJSON(data) + + return data } func resultsToJSON(data []string) { + jsonData := make([][]byte, 0) for _, i := range data { splitStrings := strings.Split(i, " ") hostname := splitStrings[0] @@ -87,7 +90,7 @@ func resultsToJSON(data []string) { if err != nil { fmt.Println(err) } - fmt.Println(string(b)) + jsonData = append(jsonData, b) } diff --git a/pkg/shell/shell.go b/pkg/shell/shell.go new file mode 100644 index 0000000..4d05d1c --- /dev/null +++ b/pkg/shell/shell.go @@ -0,0 +1,40 @@ +package shell + +import ( + "fmt" + "strings" + + "git.linuxrocker.com/mattburchett/go_tab-magic/pkg/config" +) + +func CreateShellAliases(data []string, username string, config config.Config) { + for _, i := range data { + splitStrings := strings.Split(i, " ") + hostname := splitStrings[0] + txt := splitStrings[2] + + jump := config.JumpHost + stringSplit := config.SplitString + + remoteUser := username + sudo := "sudo su -" + rac := "ssh" + racOpts := "-AXt -l" + hop := "ssh -AXt" + prerac := "" + + host := strings.TrimRight(hostname, stringSplit) + fqdn := strings.TrimLeft(hostname, stringSplit) + + greentext := "tput -T xterm setaf 2; " + // redtext := "tput -T xterm setaf 1; " + resettext := "tput -T xterm sgr0; " + message := fmt.Sprintf("%vecho \"Authenticating as: %v\";%v", greentext, remoteUser, resettext) + + if txt == "" { + fmt.Printf("alias %v=\\'%v%v%v %v@%v \"%v %v %v %v %v\"'", host, message, prerac, hop, username, jump, rac, racOpts, remoteUser, fqdn, sudo) + } else { + fmt.Printf("alias %v=\\'%v%v%v %v@%v \"%v %v %v %v %v\"'", host, message, prerac, hop, username, jump, rac, racOpts, remoteUser, fqdn, sudo) + } + } +}