customresources

package
v0.12.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 13, 2017 License: BSD-2-Clause Imports: 10 Imported by: 0

Documentation

Overview

Package customresources provides a Go library for building CloudFormation custom resource handlers.

Index

Constants

View Source
const (
	Create = "Create"
	Update = "Update"
	Delete = "Delete"
)

Possible request types.

View Source
const (
	StatusSuccess = "SUCCESS"
	StatusFailed  = "FAILED"
)

Possible response statuses.

Variables

This section is empty.

Functions

func SendResponse

func SendResponse(req Request, response Response) error

SendResponse sends the response the Response to the requests response url

func SendResponseWithClient

func SendResponseWithClient(client interface {
	Do(*http.Request) (*http.Response, error)
}, req Request, response Response) error

SendResponseWithClient uploads the response to the requests signed ResponseURL.

Types

type IntValue

type IntValue int64

IntValue defines an int64 type that can parse integers as strings from json. It's common to use `Ref`'s inside templates, which means the value of some properties could be a string or an integer.

func Int

func Int(v int64) *IntValue

func (*IntValue) UnmarshalJSON

func (i *IntValue) UnmarshalJSON(b []byte) error

func (*IntValue) Value

func (i *IntValue) Value() *int64

type Provisioner

type Provisioner interface {
	// Provision should do the appropriate provisioning, then return:
	//
	// 1. The physical id that was created, if any.
	// 2. The data to return.
	Provision(context.Context, Request) (string, interface{}, error)

	// Properties should return an instance of a type that the properties
	// can be json.Unmarshalled into.
	Properties() interface{}
}

Provisioner is something that can provision custom resources.

func WithTimeout

func WithTimeout(p Provisioner, timeout time.Duration, grace time.Duration) Provisioner

WithTimeout wraps a Provisioner with a context.WithTimeout.

type Request

type Request struct {
	// The request type is set by the AWS CloudFormation stack operation
	// (create-stack, update-stack, or delete-stack) that was initiated by
	// the template developer for the stack that contains the custom
	// resource.
	//
	// Must be one of: Create, Update, or Delete.
	RequestType string `json:"RequestType"`

	// The response URL identifies a pre-signed Amazon S3 bucket that
	// receives responses from the custom resource provider to AWS
	// CloudFormation.
	ResponseURL string `json:"ResponseURL"`

	// The Amazon Resource Name (ARN) that identifies the stack containing
	// the custom resource.
	//
	// Combining the StackId with the RequestId forms a value that can be
	// used to uniquely identify a request on a particular custom resource.
	StackId string `json:"StackId"`

	// A unique ID for the request.
	//
	// Combining the StackId with the RequestId forms a value that can be
	// used to uniquely identify a request on a particular custom resource.
	RequestId string `json:"RequestId"`

	// The template developer-chosen resource type of the custom resource in
	// the AWS CloudFormation template. Custom resource type names can be up
	// to 60 characters long and can include alphanumeric and the following
	// characters: _@-.
	ResourceType string `json:"ResourceType"`

	// The template developer-chosen name (logical ID) of the custom
	// resource in the AWS CloudFormation template. This is provided to
	// facilitate communication between the custom resource provider and the
	// template developer.
	LogicalResourceId string `json:"LogicalResourceId"`

	// A required custom resource provider-defined physical ID that is
	// unique for that provider.
	//
	// Always sent with Update and Delete requests; never sent with Create.
	PhysicalResourceId string `json:"PhysicalResourceId"`

	// This field contains the contents of the Properties object sent by the
	// template developer. Its contents are defined by the custom resource
	// provider.
	ResourceProperties interface{} `json:"ResourceProperties"`

	// Used only for Update requests. Contains the resource properties that
	// were declared previous to the update request.
	OldResourceProperties interface{} `json:"OldResourceProperties"`
}

Request represents a Custom Resource request.

See http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-requests.html

func (*Request) Hash

func (r *Request) Hash() string

Hash returns a compact unique identifier for the request.

type Response

type Response struct {
	// The status value sent by the custom resource provider in response to
	// an AWS CloudFormation-generated request.
	//
	// Must be either SUCCESS or FAILED.
	Status string `json:"Status"`

	// Describes the reason for a failure response.
	//
	// Required if Status is FAILED; optional otherwise.
	Reason string `json:"Reason,omitempty"`

	// This value should be an identifier unique to the custom resource
	// vendor, and can be up to 1Kb in size. The value must be a non-empty
	// string.
	PhysicalResourceId string `json:"PhysicalResourceId"`

	// The Amazon Resource Name (ARN) that identifies the stack containing
	// the custom resource. This response value should be copied verbatim
	// from the request.
	StackId string `json:"StackId"`

	// A unique ID for the request. This response value should be copied
	// verbatim from the request.
	RequestId string `json:"RequestId"`

	// The template developer-chosen name (logical ID) of the custom
	// resource in the AWS CloudFormation template. This response value
	// should be copied verbatim from the request.
	LogicalResourceId string `json:"LogicalResourceId"`

	// Optional, custom resource provider-defined name-value pairs to send
	// with the response. The values provided here can be accessed by name
	// in the template with Fn::GetAtt.
	Data interface{} `json:"Data,omitempty"`
}

Response represents the response body we send back to CloudFormation when provisioning is complete.

See http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/crpg-ref-responses.html

func NewResponseFromRequest

func NewResponseFromRequest(req Request) Response

NewResponseFromRequest initializes a new Response from a Request, filling in the required verbatim fields.

type ResponseClient

type ResponseClient struct {
	// contains filtered or unexported fields
}

ResponseClient is a client that can send responses to a requests ResponseURL.

func (*ResponseClient) SendResponse

func (c *ResponseClient) SendResponse(req Request, response Response) error

SendResponse sends the response to the request's ResponseURL.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL