netbox-community / go-netbox

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

Error when geting available ip from prefix informing description. #38

Closed limberger closed 4 years ago

limberger commented 6 years ago

HI,

In POSTMAN this work:

POST /api/ipam/prefixes/1/available-ips/ HTTP/1.1
Host: 172.17.1.1
authorization: Token aae35cabcfe231ebc8734a798f1cac63439a7a2b
Cache-Control: no-cache
content-type: application/json
Postman-Token: c11a2409-fd58-4dbf-b49c-2b4f557c7a5c

{
"description":"Inclusion - Terraform"
}

When i try to use this from go-netbox (i am new with golang):

import (
    "log"

    api "github.com/digitalocean/go-netbox/netbox"
    "github.com/digitalocean/go-netbox/netbox/client/ipam"
    "github.com/digitalocean/go-netbox/netbox/models"
    "github.com/go-openapi/runtime"
)

func main() {
    c := api.NewNetboxWithAPIKey("172.17.1.1", "aae35cabcfe231ebc8734a798f1cac63439a7a2b")
    var parm = ipam.NewIPAMPrefixesAvailableIpsCreateParams()
    prefixes_id := 2
    description := "Teste de inclusao de IP - Terraform"
    var mp = &models.Prefix{}
    mp.Description = description
    var res models.PrefixStatus
    value := int64(1)
    res.Value = &value
    mp.Status = &res
    a, err4 := mp.MarshalBinary()
    log.Printf("obj mp: %v\n", string(a))
    if err4 != nil {
        log.Printf("err3: %v\n", err4)
    }
    parm.SetData(mp)
    parm.SetID(int64(prefixes_id))
    log.Printf("[DEBUG] JP descriptioin %v\n", description)
    log.Println("[DEBUG] JP - Executado...")
    out, err := c.IPAM.IPAMPrefixesAvailableIpsCreate(parm, nil)

    if err != nil {
        log.Println("[DEBUG] JP - Err ao criar IP *************************************")
        log.Printf("[DEBUG] JP - Err: %v \n", err)
    }
    if out != nil {
        log.Println("[DEBUG] JP - Out ok ao criar IP **********************************")
        log.Printf("Created %v\n", out.Payload.Created)
        log.Printf("Custom Fields: %v\n", out.Payload.CustomFields)
        log.Printf("Description: %v\n", out.Payload.Description)
        log.Printf("Family: %v\n", out.Payload.Family)
        log.Printf("ID: %v\n", out.Payload.ID)
        log.Printf("IsPool: %v\n", out.Payload.IsPool)
        log.Printf("LastUpdated: %v\n", out.Payload.LastUpdated)
        log.Printf("Prefix: %v\n", out.Payload.Prefix)
        log.Printf("Role: %v\n", out.Payload.Role)
        log.Printf("Site: %v\n", out.Payload.Site)
        log.Printf("Status: %v\n", out.Payload.Status)
        if out.Payload.Tenant != nil {
            log.Printf("Tenant: %v\n", out.Payload.Tenant)
        }
        if out.Payload.Vlan != nil {
            log.Printf("Vlan Name: %v\n", out.Payload.Vlan.Name)
        }
        log.Print(out.Payload.Vrf)
        log.Printf("[DEBUG] JP - Out: %v \n", out)
        log.Println("[DEBUG] JP - *****************************************************")
    }
}

The result is:

2018/08/23 13:59:33 obj mp: {"created":"0001-01-01","description":"Teste de inclusao de IP - Terraform","last_updated":"0001-01-01T00:00:00.000Z","prefix":null,"role":null,"site":null,"status":{"label":null,"value":1},"tenant":null,"vlan":null,"vrf":null}
2018/08/23 13:59:33 [DEBUG] JP descriptioin Teste de inclusao de IP - Terraform
2018/08/23 13:59:33 [DEBUG] JP - Executado...
2018/08/23 13:59:33 [DEBUG] JP - Err ao criar IP *************************************
2018/08/23 13:59:33 [DEBUG] JP - Err: unknown error (status 500): {resp:0xc42032a000} 

The problem is in JSON serialization? Is possible to do like de POSTMAN example (only serializing the Description)?

Thanks, jp