blob: 6b6f3a34b3eb12e3caf31b291f4ee190051b5c0f [file] [log] [blame]
package stacks
import (
"encoding/json"
"github.com/gophercloud/gophercloud"
"github.com/gophercloud/gophercloud/pagination"
)
// CreatedStack represents the object extracted from a Create operation.
type CreatedStack struct {
ID string `json:"id"`
Links []gophercloud.Link `json:"links"`
}
// CreateResult represents the result of a Create operation.
type CreateResult struct {
gophercloud.Result
}
// Extract returns a pointer to a CreatedStack object and is called after a
// Create operation.
func (r CreateResult) Extract() (*CreatedStack, error) {
var s struct {
CreatedStack *CreatedStack `json:"stack"`
}
err := r.ExtractInto(&s)
return s.CreatedStack, err
}
// AdoptResult represents the result of an Adopt operation. AdoptResult has the
// same form as CreateResult.
type AdoptResult struct {
CreateResult
}
// StackPage is a pagination.Pager that is returned from a call to the List function.
type StackPage struct {
pagination.SinglePageBase
}
// IsEmpty returns true if a ListResult contains no Stacks.
func (r StackPage) IsEmpty() (bool, error) {
stacks, err := ExtractStacks(r)
return len(stacks) == 0, err
}
// ListedStack represents an element in the slice extracted from a List operation.
type ListedStack struct {
CreationTime gophercloud.JSONRFC3339NoZ `json:"creation_time"`
Description string `json:"description"`
ID string `json:"id"`
Links []gophercloud.Link `json:"links"`
Name string `json:"stack_name"`
Status string `json:"stack_status"`
StatusReason string `json:"stack_status_reason"`
Tags []string `json:"tags"`
UpdatedTime gophercloud.JSONRFC3339NoZ `json:"updated_time"`
}
// ExtractStacks extracts and returns a slice of ListedStack. It is used while iterating
// over a stacks.List call.
func ExtractStacks(r pagination.Page) ([]ListedStack, error) {
var s struct {
ListedStacks []ListedStack `json:"stacks"`
}
err := (r.(StackPage)).ExtractInto(&s)
return s.ListedStacks, err
}
// RetrievedStack represents the object extracted from a Get operation.
type RetrievedStack struct {
Capabilities []interface{} `json:"capabilities"`
CreationTime gophercloud.JSONRFC3339NoZ `json:"creation_time"`
Description string `json:"description"`
DisableRollback bool `json:"disable_rollback"`
ID string `json:"id"`
Links []gophercloud.Link `json:"links"`
NotificationTopics []interface{} `json:"notification_topics"`
Outputs []map[string]interface{} `json:"outputs"`
Parameters map[string]string `json:"parameters"`
Name string `json:"stack_name"`
Status string `json:"stack_status"`
StatusReason string `json:"stack_status_reason"`
Tags []string `json:"tags"`
TemplateDescription string `json:"template_description"`
Timeout int `json:"timeout_mins"`
UpdatedTime gophercloud.JSONRFC3339NoZ `json:"updated_time"`
}
// GetResult represents the result of a Get operation.
type GetResult struct {
gophercloud.Result
}
// Extract returns a pointer to a RetrievedStack object and is called after a
// Get operation.
func (r GetResult) Extract() (*RetrievedStack, error) {
var s struct {
Stack *RetrievedStack `json:"stack"`
}
err := r.ExtractInto(&s)
return s.Stack, err
}
// UpdateResult represents the result of a Update operation.
type UpdateResult struct {
gophercloud.ErrResult
}
// DeleteResult represents the result of a Delete operation.
type DeleteResult struct {
gophercloud.ErrResult
}
// PreviewedStack represents the result of a Preview operation.
type PreviewedStack struct {
Capabilities []interface{} `json:"capabilities"`
CreationTime gophercloud.JSONRFC3339NoZ `json:"creation_time"`
Description string `json:"description"`
DisableRollback bool `json:"disable_rollback"`
ID string `json:"id"`
Links []gophercloud.Link `json:"links"`
Name string `json:"stack_name"`
NotificationTopics []interface{} `json:"notification_topics"`
Parameters map[string]string `json:"parameters"`
Resources []interface{} `json:"resources"`
TemplateDescription string `json:"template_description"`
Timeout int `json:"timeout_mins"`
UpdatedTime gophercloud.JSONRFC3339NoZ `json:"updated_time"`
}
// PreviewResult represents the result of a Preview operation.
type PreviewResult struct {
gophercloud.Result
}
// Extract returns a pointer to a PreviewedStack object and is called after a
// Preview operation.
func (r PreviewResult) Extract() (*PreviewedStack, error) {
var s struct {
PreviewedStack *PreviewedStack `json:"stack"`
}
err := r.ExtractInto(&s)
return s.PreviewedStack, err
}
// AbandonedStack represents the result of an Abandon operation.
type AbandonedStack struct {
Status string `json:"status"`
Name string `json:"name"`
Template map[string]interface{} `json:"template"`
Action string `json:"action"`
ID string `json:"id"`
Resources map[string]interface{} `json:"resources"`
Files map[string]string `json:"files"`
StackUserProjectID string `json:"stack_user_project_id"`
ProjectID string `json:"project_id"`
Environment map[string]interface{} `json:"environment"`
}
// AbandonResult represents the result of an Abandon operation.
type AbandonResult struct {
gophercloud.Result
}
// Extract returns a pointer to an AbandonedStack object and is called after an
// Abandon operation.
func (r AbandonResult) Extract() (*AbandonedStack, error) {
var s *AbandonedStack
err := r.ExtractInto(&s)
return s, err
}
// String converts an AbandonResult to a string. This is useful to when passing
// the result of an Abandon operation to an AdoptOpts AdoptStackData field.
func (r AbandonResult) String() (string, error) {
out, err := json.Marshal(r)
return string(out), err
}