diff --git a/api/package_repositories.go b/api/package_repositories.go new file mode 100644 index 0000000..7ec051a --- /dev/null +++ b/api/package_repositories.go @@ -0,0 +1,12 @@ +package api + +import ( + "github.com/maas/gomaasclient/entity" +) + +// PackageRepositories is an interface for listing and creating +// Package Repository records +type PackageRepositories interface { + Get() ([]entity.PackageRepository, error) + Create(params *entity.PackageRepositoryParams) (*entity.PackageRepository, error) +} diff --git a/api/package_repository.go b/api/package_repository.go new file mode 100644 index 0000000..32e27da --- /dev/null +++ b/api/package_repository.go @@ -0,0 +1,12 @@ +package api + +import ( + "github.com/maas/gomaasclient/entity" +) + +// PackageRepository represents the MAAS Server Package Repository endpoint +type PackageRepository interface { + Get(id int) (*entity.PackageRepository, error) + Update(id int, params *entity.PackageRepositoryParams) (*entity.PackageRepository, error) + Delete(id int) error +} diff --git a/client/client.go b/client/client.go index d77b37f..3d369bf 100644 --- a/client/client.go +++ b/client/client.go @@ -70,6 +70,8 @@ func constructClient(apiClient *APIClient) *Client { ResourcePool: &ResourcePool{APIClient: *apiClient}, ResourcePools: &ResourcePools{APIClient: *apiClient}, MAASServer: &MAASServer{APIClient: *apiClient}, + PackageRepository: &PackageRepository{APIClient: *apiClient}, + PackageRepositories: &PackageRepositories{APIClient: *apiClient}, } return &client @@ -116,6 +118,8 @@ type Client struct { ResourcePool api.ResourcePool ResourcePools api.ResourcePools MAASServer api.MAASServer + PackageRepository api.PackageRepository + PackageRepositories api.PackageRepositories } // GetAPIClient returns a MAAS API client. diff --git a/client/device.go b/client/device.go index cb5437e..02aae7f 100644 --- a/client/device.go +++ b/client/device.go @@ -1,3 +1,4 @@ +//nolint:dupl // disable dupl check on client for now package client import ( diff --git a/client/fabric.go b/client/fabric.go index 1a9ead0..0edc2d9 100644 --- a/client/fabric.go +++ b/client/fabric.go @@ -1,3 +1,4 @@ +//nolint:dupl // disable dupl check on client for now package client import ( diff --git a/client/ip_range.go b/client/ip_range.go index 68f753d..7549789 100644 --- a/client/ip_range.go +++ b/client/ip_range.go @@ -1,3 +1,4 @@ +//nolint:dupl // disable dupl check on client for now package client import ( diff --git a/client/package_repositories.go b/client/package_repositories.go new file mode 100644 index 0000000..f805f3c --- /dev/null +++ b/client/package_repositories.go @@ -0,0 +1,44 @@ +//nolint:dupl // disable dupl check on client for now +package client + +import ( + "encoding/json" + "net/url" + + "github.com/google/go-querystring/query" + "github.com/maas/gomaasclient/entity" +) + +// PackageRepositories implements api.PackageRepositories +type PackageRepositories struct { + APIClient APIClient +} + +func (p *PackageRepositories) client() APIClient { + return p.APIClient.GetSubObject("package-repositories") +} + +// Get fetches a list of PackageRepositories +func (p *PackageRepositories) Get() ([]entity.PackageRepository, error) { + packageRepositories := make([]entity.PackageRepository, 0) + err := p.client().Get("", url.Values{}, func(data []byte) error { + return json.Unmarshal(data, &packageRepositories) + }) + + return packageRepositories, err +} + +// Create creates a new PackageRepository +func (p *PackageRepositories) Create(packageRepositoryParams *entity.PackageRepositoryParams) (*entity.PackageRepository, error) { + qsp, err := query.Values(packageRepositoryParams) + if err != nil { + return nil, err + } + + packageRepository := new(entity.PackageRepository) + err = p.client().Post("", qsp, func(data []byte) error { + return json.Unmarshal(data, packageRepository) + }) + + return packageRepository, err +} diff --git a/client/package_repository.go b/client/package_repository.go new file mode 100644 index 0000000..6ceb595 --- /dev/null +++ b/client/package_repository.go @@ -0,0 +1,50 @@ +//nolint:dupl // disable dupl check on client for now +package client + +import ( + "encoding/json" + "fmt" + "net/url" + + "github.com/google/go-querystring/query" + "github.com/maas/gomaasclient/entity" +) + +// PackageRepository implements api.PackageRepository +type PackageRepository struct { + APIClient APIClient +} + +func (p *PackageRepository) client(id int) APIClient { + return p.APIClient.GetSubObject("package-repositories").GetSubObject(fmt.Sprintf("%v", id)) +} + +// Get fetches a packageRepository +func (p *PackageRepository) Get(id int) (*entity.PackageRepository, error) { + packageRepository := new(entity.PackageRepository) + err := p.client(id).Get("", url.Values{}, func(data []byte) error { + return json.Unmarshal(data, packageRepository) + }) + + return packageRepository, err +} + +// Update updates a given PackageRepository +func (p *PackageRepository) Update(id int, packageRepositoryParams *entity.PackageRepositoryParams) (*entity.PackageRepository, error) { + qsp, err := query.Values(packageRepositoryParams) + if err != nil { + return nil, err + } + + packageRepository := new(entity.PackageRepository) + err = p.client(id).Put(qsp, func(data []byte) error { + return json.Unmarshal(data, packageRepository) + }) + + return packageRepository, err +} + +// Delete deletes a given PackageRepository +func (p *PackageRepository) Delete(id int) error { + return p.client(id).Delete() +} diff --git a/entity/package_repository.go b/entity/package_repository.go new file mode 100644 index 0000000..43e055b --- /dev/null +++ b/entity/package_repository.go @@ -0,0 +1,29 @@ +package entity + +type PackageRepository struct { + Name string `json:"name,omitempty"` + URL string `json:"url,omitempty"` + Key string `json:"key,omitempty"` + ResourceURI string `json:"resource_uri,omitempty"` + Distributions []string `json:"distributions,omitempty"` + DisabledPockets []string `json:"disabled_pockets,omitempty"` + DisabledComponents []string `json:"disabled_components,omitempty"` + Components []string `json:"components,omitempty"` + Arches []string `json:"arches,omitempty"` + ID int `json:"id,omitempty"` + DisableSources bool `json:"disable_sources,omitempty"` + Enabled bool `json:"enabled,omitempty"` +} + +type PackageRepositoryParams struct { + Name string `url:"name,omitempty"` + URL string `url:"url,omitempty"` + Distributions string `url:"distributions,omitempty"` + DisabledPockets string `url:"disabled_pockets,omitempty"` + DisabledComponents string `url:"disabled_components,omitempty"` + Components string `url:"components,omitempty"` + Arches string `url:"arches,omitempty"` + Key string `url:"key,omitempty"` + DisableSources bool `url:"disable_sources,omitempty"` + Enabled bool `url:"enabled,omitempty"` +}