Skip to content
Snippets Groups Projects
main.go 2.17 KiB
Newer Older
  • Learn to ignore specific revisions
  • package main
    
    import (
    	"flag"
    	"fmt"
    	"os"
    
    
    	venvmanager "code.fbi.h-da.de/danet/gosdn/applications/venv-manager/venv-manager"
    	"google.golang.org/grpc"
    	"google.golang.org/grpc/credentials/insecure"
    )
    
    func main() {
    	var dialConnectionURL string
    	var yamlFilepath string
    	var customContainerRegistryURL string
    	dialOption := grpc.WithTransportCredentials(insecure.NewCredentials())
    
    	flag.StringVar(&dialConnectionURL, "controller", "localhost:55055", "")
    	flag.StringVar(&yamlFilepath, "file", "venv.clab.yaml", "")
    	flag.StringVar(&customContainerRegistryURL, "registry", "", "")
    
    	// Define own output of --help and parsing error, as some library also uses the flags library and adds there flags to ours, which is not intended.
    	flag.Usage = func() {
    		fmt.Printf("Usable flags of the venv-manager:\n\n")
    		fmt.Println("--controller string\n\t Controller URL and Port. (Default: 'localhost:55055')")
    		fmt.Println("--file string\n\t Filename of the resulting topology file. (Default: 'venv.clab.yaml')")
    
    		fmt.Println("--registry string\n\t URL of the container registry to use. Keep in mind that cEOS images and prebuild linux images with the gnmi target are not available on dockerhub. (Default: dockerhub)")
    
    		fmt.Println("--help\n\t Shows this help screen.")
    	}
    	flag.Parse()
    
    
    	customContainerRegistryURL = ensureLastCharIsSlash(customContainerRegistryURL)
    
    
    	fmt.Println("I will try to connect to goSDN located at", dialConnectionURL)
    	venvManager := venvmanager.NewVenvManager(dialConnectionURL, dialOption, yamlFilepath, customContainerRegistryURL)
    
    	err := venvManager.TestConnection()
    	if err != nil {
    		fmt.Println(err)
    		fmt.Println("Can't reach controller, exiting.")
    		os.Exit(1)
    	}
    	fmt.Println("Connection successful!")
    	fmt.Println("Generating file...")
    
    	err = venvManager.CreateTopologyFile()
    	if err != nil {
    		fmt.Println(err)
    		fmt.Println("An error occurred, exiting.")
    		os.Exit(1)
    	}
    	os.Exit(0)
    }
    
    
    // Ensures that the last char of a string is a slash, if this string is not empty.
    func ensureLastCharIsSlash(inputString string) string {
    	if len(inputString) == 0 {
    		return inputString
    	}
    
    	if strings.HasSuffix(inputString, "/") {
    		return inputString
    	}
    
    	return inputString + "/"
    }