https://github.com/ovirt/go-ovirt
Go SDK Source-Code for oVirt 4.x, generated by ovirt/ovirt-engine-sdk-go.
https://github.com/ovirt/go-ovirt
go go-library ovirt ovirt-api-metamodel ovirt-engine ovirt-management
Last synced: about 1 year ago
JSON representation
Go SDK Source-Code for oVirt 4.x, generated by ovirt/ovirt-engine-sdk-go.
- Host: GitHub
- URL: https://github.com/ovirt/go-ovirt
- Owner: oVirt
- License: apache-2.0
- Created: 2017-07-25T01:30:54.000Z (almost 9 years ago)
- Default Branch: master
- Last Pushed: 2025-04-30T12:04:49.000Z (about 1 year ago)
- Last Synced: 2025-04-30T12:58:48.075Z (about 1 year ago)
- Topics: go, go-library, ovirt, ovirt-api-metamodel, ovirt-engine, ovirt-management
- Language: Go
- Homepage:
- Size: 3.7 MB
- Stars: 31
- Watchers: 17
- Forks: 13
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGES.adoc
- License: LICENSE.txt
Awesome Lists containing this project
README
# oVirt Go SDK
[](https://travis-ci.org/oVirt/ovirt-engine-sdk-go)
[](https://goreportcard.com/report/github.com/oVirt/go-ovirt)
## 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](https://github.com/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](https://github.com/oVirt/ovirt-engine-sdk-go) repository instead.
## Usage
To use the SDK you should import ovirtsdk package as follows:
```go
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 using `v4.0.x` via importing `gopkg.in/ovirt/go-ovirt.v4` or `4.2.1`, we highly recommend you to update to `4.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:
```go
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_
```go
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_
```go
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.