github.com/dim13/unifi@v0.0.0-20230308161331-9b04946f5e93/cmd/list-portprofiles/main.go (about)

     1  // Copyright (c) 2014 Dimitri Sokolyuk. All rights reserved.
     2  // Use of this source code is governed by ISC-style license
     3  // that can be found in the LICENSE file.
     4  
     5  // Example command list-portprofile
     6  // list portprofiles of a given site
     7  package main
     8  
     9  import (
    10  	"flag"
    11  	"fmt"
    12  	"log"
    13  	"os"
    14  	"strconv"
    15  	"strings"
    16  	"text/tabwriter"
    17  
    18  	"github.com/dim13/unifi"
    19  )
    20  
    21  var (
    22  	host    = flag.String("host", "unifi", "Controller hostname")
    23  	user    = flag.String("user", "admin", "Controller username")
    24  	pass    = flag.String("pass", "unifi", "Controller password")
    25  	port    = flag.String("port", "8443", "Controller port")
    26  	version = flag.Int("version", 5, "Controller base version")
    27  	siteid  = flag.String("siteid", "default", "Sitename or desctription")
    28  )
    29  
    30  func main() {
    31  	w := new(tabwriter.Writer)
    32  	w.Init(os.Stdout, 0, 8, 3, ' ', 0)
    33  	defer w.Flush()
    34  
    35  	flag.Parse()
    36  
    37  	u, err := unifi.Login(*user, *pass, *host, *port, *siteid, *version)
    38  	if err != nil {
    39  		log.Fatalln("Login returned error: ", err)
    40  	}
    41  	defer u.Logout()
    42  
    43  	site, err := u.Site(*siteid)
    44  	if err != nil {
    45  		log.Fatal(err)
    46  	}
    47  
    48  	// Returns a slice of devices
    49  	profiles, err := u.PortProfiles(site)
    50  
    51  	if err != nil {
    52  		log.Fatalln(err)
    53  	}
    54  
    55  	// Returns a map of networks with ID as key
    56  	nm, err := u.NetworkMap(site)
    57  
    58  	if err != nil {
    59  		log.Fatalln(err)
    60  	}
    61  
    62  	// Output headline
    63  	fmt.Fprintln(w, "ID\tName\tSiteID\tOpMode\tAutoneg\tNativeVLAN\tAttrNodelete\tAttrNoEdit\tForward\tTaggedNetworks")
    64  
    65  	for _, p := range profiles {
    66  		id := p.ID                                 // string
    67  		name := p.Name                             // string
    68  		siteid := p.SiteID                         // string
    69  		opmode := p.OpMode                         // string
    70  		autoneg := p.Autoneg                       // bool
    71  		nativeNetID := p.NativeNetworkconfID       // string
    72  		attrNoDelete := p.AttrNoDelete             // bool
    73  		attrNoEdit := p.AttrNoEdit                 // bool
    74  		forward := p.Forward                       // string
    75  		taggedNetworkIDs := p.TaggedNetworkconfIds //
    76  
    77  		nativeVlan := ""
    78  		nativeVlan = nm[nativeNetID].Name
    79  
    80  		taggedNetworks := ""
    81  		for _, t := range taggedNetworkIDs {
    82  			taggedNetworks += fmt.Sprintf("%s ", nm[t].Name)
    83  		}
    84  		taggedNetworks = strings.TrimSpace(taggedNetworks)
    85  
    86  		fmt.Fprintf(w, "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n", id, name, siteid, opmode, strconv.FormatBool(autoneg), nativeVlan, strconv.FormatBool(attrNoDelete), strconv.FormatBool(attrNoEdit), forward, taggedNetworks)
    87  	}
    88  }