Awesome
oVirt Go SDK
Introduction
The oVirt Go SDK is a Go package that simplifies access to the oVirt Engine API.
IMPORTANT: The code in this project is generated automatically by the oVirt/ovirt-engine-sdk-go. So if you want to know how to generate the code, please read the
README.md
in the oVirt/ovirt-engine-sdk-go repository instead.
Usage
To use the SDK you should import ovirtsdk package as follows:
import (
ovirtsdk4 "github.com/ovirt/go-ovirt"
)
IMPORTANT: To make it easy to manage dependencies on stable go-ovirt releases, starting with go-ovirt
4.2.2
, we will move to semantic versioning. If you are still usingv4.0.x
via importinggopkg.in/ovirt/go-ovirt.v4
or4.2.1
, we highly recommend you to update to4.2.2
or above. In product environment, please NEVER adopt the master branch which will always be under heavy development.
That will give you access to all the classes of the SDK, and in particular
to the Connection
class. This is the entry point of the SDK,
and gives you access to the root of the tree of services of the API:
import (
"fmt"
"time"
ovirtsdk4 "github.com/ovirt/go-ovirt"
)
// Create the connection to the api server
inputRawURL := "https://10.1.111.229/ovirt-engine/api"
conn, err := ovirtsdk4.NewConnectionBuilder().
URL(inputRawURL).
Username("admin@internal").
Password("qwer1234").
Insecure(true).
Compress(true).
Timeout(time.Second * 10).
Build()
if err != nil {
t.Fatalf("Make connection failed, reason: %s", err.Error())
}
// Never forget to close connection
defer conn.Close()
There are two ways of using the SDK, one is calling regular functions, which should check if error returned, the other is calling functions prefixed with Must
, which is short and chain-function calling supported.
Calling the regular functions is recommended, because it is more accurate for catching errors.
IMPORTANT: you should catch the panic errors by defining the recover-defer function.
Regular Recommended
import (
"fmt"
"time"
ovirtsdk4 "github.com/ovirt/go-ovirt"
)
// Create the connection to the api server
inputRawURL := "https://10.1.111.229/ovirt-engine/api"
conn, err := ovirtsdk4.NewConnectionBuilder().
URL(inputRawURL).
Username("admin@internal").
Password("qwer1234").
Insecure(true).
Compress(true).
Timeout(time.Second * 10).
Build()
if err != nil {
t.Fatalf("Make connection failed, reason: %s", err.Error())
}
defer conn.Close()
// Get the reference to the "clusters" service
clustersService := conn.SystemService().ClustersService()
// Use the "list" method of the "clusters" service to list all the clusters of the system
clustersResponse, err := clustersService.List().Send()
if err != nil {
fmt.Printf("Failed to get cluster list, reason: %v\n", err)
return
}
if clusters, ok := clustersResponse.Clusters(); ok {
// Print the datacenter names and identifiers
fmt.Printf("Cluster: (")
for _, cluster := range clusters.Slice() {
if clusterName, ok := cluster.Name(); ok {
fmt.Printf(" name: %v", clusterName)
}
if clusterId, ok := cluster.Id(); ok {
fmt.Printf(" id: %v", clusterId)
}
}
fmt.Println(")")
}
Must Not-Recommended
import (
"fmt"
"time"
ovirtsdk4 "github.com/ovirt/go-ovirt"
)
// Create the connection to the api server
inputRawURL := "https://10.1.111.229/ovirt-engine/api"
conn, err := ovirtsdk4.NewConnectionBuilder().
URL(inputRawURL).
Username("admin@internal").
Password("qwer1234").
Insecure(true).
Compress(true).
Timeout(time.Second * 10).
Build()
if err != nil {
t.Fatalf("Make connection failed, reason: %s", err.Error())
}
defer conn.Close()
// To use `Must` methods, you should recover it if panics
defer func() {
if err := recover(); err != nil {
fmt.Printf("Panics occurs %v, try the non-Must methods to find the reason", err)
}
}()
// Get the reference to the "clusters" service
clustersService := conn.SystemService().ClustersService()
// Use the "list" method of the "clusters" service to list all the clusters of the system
clustersResponse := clustersService.List().MustSend()
clusters := clustersResponse.MustClusters()
// Print the datacenter names and identifiers
fmt.Printf("Cluster: (")
for _, cluster := range clusters.Slice() {
fmt.Printf(" name: %v", cluster.MustName())
fmt.Printf(" id: %v", cluster.MustId())
}
fmt.Println(")")
More examples
You could refer to more examples under examples/
directory.