Skip to content

Commit

Permalink
client: Add site client functions
Browse files Browse the repository at this point in the history
Signed-off-by: Kadin Sayani <[email protected]>
  • Loading branch information
kadinsayani committed Feb 4, 2025
1 parent cf8c654 commit 7cbdfa6
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 2 deletions.
10 changes: 8 additions & 2 deletions client/interfaces.go
Original file line number Diff line number Diff line change
Expand Up @@ -426,6 +426,13 @@ type InstanceServer interface {
UpdateClusterGroup(name string, group api.ClusterGroupPut, ETag string) error
GetClusterGroup(name string) (*api.ClusterGroup, string, error)

// Site functions ("sites" API extension)
GetSite(name string) (remote *api.Site, ETag string, err error)
GetSites() (remotes []api.Site, err error)
JoinSite(remote api.SitePost) (op Operation, err error)
UpdateSiteName(name string) (op Operation, err error)
DeleteSite(name string) (op Operation, err error)

// Warning functions
GetWarningUUIDs() (uuids []string, err error)
GetWarnings() (warnings []api.Warning, err error)
Expand Down Expand Up @@ -675,8 +682,7 @@ type InstanceConsoleArgs struct {

// The InstanceConsoleLogArgs struct is used to pass additional options during a
// instance console log request.
type InstanceConsoleLogArgs struct {
}
type InstanceConsoleLogArgs struct{}

// The InstanceExecArgs struct is used to pass additional options during instance exec.
type InstanceExecArgs struct {
Expand Down
85 changes: 85 additions & 0 deletions client/lxd_sites.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package lxd

import (
"fmt"

"github.com/canonical/lxd/shared/api"
)

// GetServerSites returns all sites.
func (r *ProtocolLXD) GetSites() ([]api.Site, error) {
err := r.CheckExtension("sites")
if err != nil {
return nil, err
}

sites := []api.Site{}
_, err = r.queryStruct("GET", "/sites/", nil, "", &sites)
if err != nil {
return nil, err
}

return sites, nil
}

// GetSite returns information about a site.
func (r *ProtocolLXD) GetSite(name string) (*api.Site, string, error) {
err := r.CheckExtension("sites")
if err != nil {
return nil, "", err
}

site := &api.Site{}
etag, err := r.queryStruct("GET", fmt.Sprintf("/sites/%s", name), nil, "", &site)
if err != nil {
return nil, "", err
}

return site, etag, nil
}

// JoinSite requests add a new site.
func (r *ProtocolLXD) JoinSite(site api.SitePost) (Operation, error) {
err := r.CheckExtension("sites")
if err != nil {
return nil, err
}

op, _, err := r.queryOperation("POST", "/site/join", site, "", true)
if err != nil {
return nil, err
}

return op, nil
}

// UpdateSiteName updates a site's name.
func (r *ProtocolLXD) UpdateSiteName(name string) (Operation, error) {
// TODO: expand function to provide support for updating site addresses.
err := r.CheckExtension("sites")
if err != nil {
return nil, err
}

op, _, err := r.queryOperation("PUT", fmt.Sprintf("/sites/%s", name), nil, "", true)
if err != nil {
return nil, err
}

return op, nil
}

// DeleteSite deletes a site.
func (r *ProtocolLXD) DeleteSite(name string) (Operation, error) {
err := r.CheckExtension("sites")
if err != nil {
return nil, err
}

op, _, err := r.queryOperation("DELETE", fmt.Sprintf("/sites/%s", name), nil, "", true)
if err != nil {
return nil, err
}

return op, nil
}

0 comments on commit 7cbdfa6

Please sign in to comment.