blob: 909f1c12925ae99fb06f85104a64ddacfd489af0 [file] [log] [blame]
package projects
import (
"gerrit.mcp.mirantis.net/debian/gophercloud.git"
"gerrit.mcp.mirantis.net/debian/gophercloud.git/pagination"
)
// ListOptsBuilder allows extensions to add additional parameters to
// the List request
type ListOptsBuilder interface {
ToProjectListQuery() (string, error)
}
// ListOpts allows you to query the List method.
type ListOpts struct {
// DomainID filters the response by a domain ID.
DomainID string `q:"domain_id"`
// Enabled filters the response by enabled projects.
Enabled *bool `q:"enabled"`
// IsDomain filters the response by projects that are domains.
// Setting this to true is effectively listing domains.
IsDomain *bool `q:"is_domain"`
// Name filters the response by project name.
Name string `q:"name"`
// ParentID filters the response by projects of a given parent project.
ParentID string `q:"parent_id"`
}
// ToProjectListQuery formats a ListOpts into a query string.
func (opts ListOpts) ToProjectListQuery() (string, error) {
q, err := gophercloud.BuildQueryString(opts)
return q.String(), err
}
// List enumerats the Projects to which the current token has access.
func List(client *gophercloud.ServiceClient, opts ListOptsBuilder) pagination.Pager {
url := listURL(client)
if opts != nil {
query, err := opts.ToProjectListQuery()
if err != nil {
return pagination.Pager{Err: err}
}
url += query
}
return pagination.NewPager(client, url, func(r pagination.PageResult) pagination.Page {
return ProjectPage{pagination.LinkedPageBase{PageResult: r}}
})
}
// GetOptsBuilder allows extensions to add additional parameters to
// the Get request.
type GetOptsBuilder interface {
ToProjectGetQuery() (string, error)
}
// GetOpts allows you to modify the details included in the Get request.
type GetOpts struct{}
// ToProjectGetQuery formats a GetOpts into a query string.
func (opts GetOpts) ToProjectGetQuery() (string, error) {
q, err := gophercloud.BuildQueryString(opts)
return q.String(), err
}
// Get retrieves details on a single project, by ID.
func Get(client *gophercloud.ServiceClient, id string, opts GetOptsBuilder) (r GetResult) {
url := getURL(client, id)
if opts != nil {
query, err := opts.ToProjectGetQuery()
if err != nil {
r.Err = err
return
}
url += query
}
_, r.Err = client.Get(url, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
return
}
// CreateOptsBuilder allows extensions to add additional parameters to
// the Create request.
type CreateOptsBuilder interface {
ToProjectCreateMap() (map[string]interface{}, error)
}
// CreateOpts allows you to modify the details included in the Create request.
type CreateOpts struct {
// DomainID is the ID this project will belong under.
DomainID string `json:"domain_id,omitempty"`
// Enabled sets the project status to enabled or disabled.
Enabled *bool `json:"enabled,omitempty"`
// IsDomain indicates if this project is a domain.
IsDomain *bool `json:"is_domain,omitempty"`
// Name is the name of the project.
Name string `json:"name,required"`
// ParentID specifies the parent project of this new project.
ParentID string `json:"parent_id,omitempty"`
// Description is the description of the project.
Description string `json:"description,omitempty"`
}
// ToProjectCreateMap formats a CreateOpts into a create request.
func (opts CreateOpts) ToProjectCreateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "project")
}
// Create creates a new Project.
func Create(client *gophercloud.ServiceClient, opts CreateOptsBuilder) (r CreateResult) {
b, err := opts.ToProjectCreateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Post(createURL(client), &b, &r.Body, nil)
return
}
// Delete deletes a project.
func Delete(client *gophercloud.ServiceClient, projectID string) (r DeleteResult) {
_, r.Err = client.Delete(deleteURL(client, projectID), nil)
return
}
// UpdateOptsBuilder allows extensions to add additional parameters to
// the Update request.
type UpdateOptsBuilder interface {
ToProjectUpdateMap() (map[string]interface{}, error)
}
// UpdateOpts allows you to modify the details included in the Update request.
type UpdateOpts struct {
// DomainID is the ID this project will belong under.
DomainID string `json:"domain_id,omitempty"`
// Enabled sets the project status to enabled or disabled.
Enabled *bool `json:"enabled,omitempty"`
// IsDomain indicates if this project is a domain.
IsDomain *bool `json:"is_domain,omitempty"`
// Name is the name of the project.
Name string `json:"name,omitempty"`
// ParentID specifies the parent project of this new project.
ParentID string `json:"parent_id,omitempty"`
// Description is the description of the project.
Description string `json:"description,omitempty"`
}
// ToUpdateCreateMap formats a UpdateOpts into an update request.
func (opts UpdateOpts) ToProjectUpdateMap() (map[string]interface{}, error) {
return gophercloud.BuildRequestBody(opts, "project")
}
// Update modifies the attributes of a project.
func Update(client *gophercloud.ServiceClient, id string, opts UpdateOptsBuilder) (r UpdateResult) {
b, err := opts.ToProjectUpdateMap()
if err != nil {
r.Err = err
return
}
_, r.Err = client.Patch(updateURL(client, id), b, &r.Body, &gophercloud.RequestOpts{
OkCodes: []int{200},
})
return
}