Skip to content

Go client doesn't query escape parameters provided to Avi #2902

Open
@christianang

Description

@christianang

Describe the bug

The go client does not query escape parameters provided to it. I've tested this with Avi 30.1.1, which results in a HTTP 400 error.

Error I see:

2024/03/01 22:07:12 Encountered an error on GET request to URL https://<avi-ip>/api/network?name=VM Network: HTTP code: 400; error from Controller: <nil>

Reproduction steps

Here is a minimal example of the issue. Notably this doesn't work with Avi 30.1.1, but it did work with previous versions, so there was probably a change introduced in 30.1.1.

package main

import (
	"log"
	"os"

	"github.com/vmware/alb-sdk/go/clients"
	"github.com/vmware/alb-sdk/go/session"
)

func main() {
	aviURL := os.Args[1]
	aviUsername := os.Args[2]
	aviPassword := os.Args[3]

	aviClient, err := clients.NewAviClient(aviURL, aviUsername,
		session.SetPassword(aviPassword),
		session.SetTenant("admin"),
		session.SetInsecure)
	if err != nil {
		log.Fatalln(err)
	}

	// Works
	_, err = aviClient.Network.GetByName("VM+Network")
	if err != nil {
		log.Fatalln(err)
	}

	// Doesn't work
	_, err = aviClient.Network.GetByName("VM Network")
	if err != nil {
		log.Fatalln(err)
	}
}

Run by

go run main.go <avi-url> <username> <password>

Expected behavior

I expect the client library to query escape the parameters I provide to it, to create a well-formed url that can be used to make REST requests to the Avi API. For example, in my example providing VM Network to the aviClient.Network.GetByName function should result in a path param that looks like ?name=VM+Network instead of ?name=VM Network.

Additional context

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions