netbox-community / go-netbox

The official Go API client for Netbox IPAM and DCIM service.
Other
195 stars 146 forks source link

Struggling to get this to run https #32

Closed SchwarzM closed 6 years ago

SchwarzM commented 6 years ago

Hi,

love the new generated client but I am struggling to get this to make an https call: https://github.com/digitalocean/go-netbox/blob/master/netbox/client/ipam/ip_am_client.go#L56

Am I holding it wrong?

chrigl commented 6 years ago

You must pass a https capable transport to the client. E.g. (see transport := httptransport.New(netboxHost, client.DefaultBasePath, []string{"https"}) )

package main

import (
        "context"
        "fmt"
        "log"
        "os"

        "github.com/digitalocean/go-netbox/netbox/client"
        "github.com/digitalocean/go-netbox/netbox/client/tenancy"
        "github.com/go-openapi/runtime"
        httptransport "github.com/go-openapi/runtime/client"
        "github.com/go-openapi/strfmt"
)

type TokenAuth struct {
        token string
}

func (t TokenAuth) AuthenticateRequest(req runtime.ClientRequest, _ strfmt.Registry) error {
        req.SetHeaderParam("Authorization", fmt.Sprintf("Token %s", t.token))
        return nil
}

func main() {
        token := os.Getenv("NETBOX_TOKEN")
        if token == "" {
                log.Fatal("No such NETBOX_TOKEN")
        }
        netboxHost := os.Getenv("NETBOX_HOST")
        if netboxHost == "" {
                log.Fatal("No such NETBOX_HOST")
        }
        keyTransport := TokenAuth{token: token}

        transport := httptransport.New(netboxHost, client.DefaultBasePath, []string{"https"})

        c := client.New(transport, nil)

        limit := int64(2)
        offset := int64(4)
        x, err := c.Tenancy.TenancyTenantsList(&tenancy.TenancyTenantsListParams{
                Limit:   &limit,
                Offset:  &offset,
                Context: context.Background(),
        }, keyTransport)
        if err != nil {
                log.Fatal(err)
        }

        fmt.Printf("Next: %s\n", x.Payload.Next)
        fmt.Printf("Prev: %s\n", x.Payload.Previous)

        for i, tx := range x.Payload.Results {
                fmt.Printf("%d. %d - %s\n", i, tx.ID, tx.Name)
        }
}
SchwarzM commented 6 years ago

going to try this out thanks.

MalteJ commented 4 years ago

The snippet above does not work. Here is a working solution:

package main

import (
    "os"

    httptransport "github.com/go-openapi/runtime/client"
    "github.com/netbox-community/go-netbox/netbox/client"
    "github.com/netbox-community/go-netbox/netbox/client/dcim"

    log "github.com/sirupsen/logrus"
)

func main() {
    token := os.Getenv("NETBOX_TOKEN")
    if token == "" {
        log.Fatalf("Please provide netbox API token via env var NETBOX_TOKEN")
    }

    netboxHost := os.Getenv("NETBOX_HOST")
    if netboxHost == "" {
        log.Fatalf("Please provide netbox host via env var NETBOX_HOST")
    }

    transport := httptransport.New(netboxHost, client.DefaultBasePath, []string{"https"})
    transport.DefaultAuthentication = httptransport.APIKeyAuth("Authorization", "header", "Token "+token)

    c := client.New(transport, nil)

    req := dcim.NewDcimSitesListParams()
    res, err := c.Dcim.DcimSitesList(req, nil)
    if err != nil {
        log.Fatalf("Cannot get sites list: %v", err)
    }
    log.Infof("res: %v", res)
}