ACI client library for Go
GoACI is a Go client library for Cisco ACI. It features a simple, extensible API, advanced JSON manipulation, and a backup
client for running queries against the backup file.
Getting Started
Installing
To start using GoACI, install Go and go get:
$ go get -u github.com/brightpuddle/goaci
Basic Usage
package main
import "github.com/brightpuddle/goaci"
func main() {
apic, _ := goaci.NewAPIC("1.1.1.1", "user", "pwd")
if err := apic.Login(); err != nil {
panic(err)
}
res, _ = apic.Get("/api/mo/uni/tn-infra")
println(res.Get("imdata.0.*.attributes.name"))
}
This will print:
infra
Result manipulation
goaci.Result uses GJSON to simplify handling JSON results. See the GJSON documentation for more detail.
res, _ := GetClass("fvBD")
res.Get("0.fvBD.attributes.name").Str // name of first BD
res.Get("0.*.attributes.name").Str // name of first BD (if you don't know the class)
for _, bd := range res.Array() {
println(res.Get("*.attributes|@pretty")) // pretty print BD attributes
}
for _, bd := range res.Get("#.fvBD.attributes").Array() {
println(res.Get("@pretty") // pretty print BD attributes
}
Helpers for common patterns
res, _ := GetDn("uni/tn-infra")
res, _ := GetClass("fvTenant")
Query parameters
Pass the goaci.Query object to the Get request to add query paramters:
queryInfra := goaci.Query("query-target-filter", `eq(fvTenant.name,"infra")`)
res, _ := apic.GetClass("fvTenant", queryInfra)
Pass as many paramters as needed:
res, _ := apic.GetClass("isisRoute",
goaci.Query("rsp-subtree-include", "relations"),
goaci.Query("query-target-filter", `eq(isisRoute.pfx,"10.66.0.1/32")`,
)
POST data creation
goaci.Body is a wrapper for SJSON. SJSON supports a path syntax simplifying JSON creation.
exampleTenant := goaci.Body{}.Set("fvTenant.attributes.name", "goaci-example").Str
apic.Post("/api/mo/uni/tn-goaci-example", exampleTenant)
These can be chained:
tenantA := goaci.Body{}.
Set("fvTenant.attributes.name", "goaci-example-a").
Set("fvTenant.attributes.descr", "Example tenant A")
...or nested:
attrs := goaci.Body{}.
Set("name", "goaci-example-b").
Set("descr", "Example tenant B").
Str
tenantB := goaaci.Body{}.SetRaw("fvTenant.attributes", attrs).Str
Token refresh
Token refresh is handled automatically. The APIC client keeps a timer and checks elapsed time on each request, refreshing the token every 8 minutes. This can be handled manually if desired:
apic, _ := goaci.NewAPIC("1.1.1.1", "user", "pwd")
apic.Login()
res, _ := apic.Get("/api/...", goaci.NoRefresh)
apic.Refresh()
Backup client
goACI also features a "backup" client for querying ACI .tar.gz backup files. This client partially mirrors the API of the HTTP client.
backup, _ := goaci.NewBackup("config.tar.gz")
res, _ := backup.GetDn("uni/tn-infra")
res, _ = backup.GetClass("fvBD")
Examples
See the examples for more usage.