forked from awslabs/goformation
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[WIP] Allow custom resources to be defined and parsed (awslabs#213)
- Loading branch information
1 parent
b2d834c
commit 7422994
Showing
4 changed files
with
139 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
package cloudformation | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/awslabs/goformation/cloudformation/policies" | ||
) | ||
|
||
// See: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-cfn-customresource.html | ||
type CustomResource struct { | ||
Type string `json:"Type,omitempty"` | ||
Properties map[string]interface{} `json:"Properties,omitempty"` | ||
|
||
// _deletionPolicy represents a CloudFormation DeletionPolicy | ||
_deletionPolicy policies.DeletionPolicy | ||
|
||
// _dependsOn stores the logical ID of the resources to be created before this resource | ||
_dependsOn []string | ||
|
||
// _metadata stores structured data associated with this resource | ||
_metadata map[string]interface{} | ||
} | ||
|
||
// AWSCloudFormationType returns the AWS CloudFormation resource type | ||
func (r *CustomResource) AWSCloudFormationType() string { | ||
return r.Type | ||
} | ||
|
||
// DependsOn returns a slice of logical ID names this resource depends on. | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html | ||
func (r *CustomResource) DependsOn() []string { | ||
return r._dependsOn | ||
} | ||
|
||
// SetDependsOn specify that the creation of this resource follows another. | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html | ||
func (r *CustomResource) SetDependsOn(dependencies []string) { | ||
r._dependsOn = dependencies | ||
} | ||
|
||
// Metadata returns the metadata associated with this resource. | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-metadata.html | ||
func (r *CustomResource) Metadata() map[string]interface{} { | ||
return r._metadata | ||
} | ||
|
||
// SetMetadata enables you to associate structured data with this resource. | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-metadata.html | ||
func (r *CustomResource) SetMetadata(metadata map[string]interface{}) { | ||
r._metadata = metadata | ||
} | ||
|
||
// DeletionPolicy returns the AWS CloudFormation DeletionPolicy to this resource | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html | ||
func (r *CustomResource) DeletionPolicy() policies.DeletionPolicy { | ||
return r._deletionPolicy | ||
} | ||
|
||
// SetDeletionPolicy applies an AWS CloudFormation DeletionPolicy to this resource | ||
// see: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html | ||
func (r *CustomResource) SetDeletionPolicy(policy policies.DeletionPolicy) { | ||
r._deletionPolicy = policy | ||
} | ||
|
||
// GetAllCustomResourceResources retrieves all CustomResource items from an AWS CloudFormation template | ||
func (t *Template) GetAllCustomResources() map[string]*CustomResource { | ||
results := map[string]*CustomResource{} | ||
for name, untyped := range t.Resources { | ||
switch resource := untyped.(type) { | ||
case *CustomResource: | ||
results[name] = resource | ||
} | ||
} | ||
return results | ||
} | ||
|
||
// GetCustomResourceWithName retrieves all CustomResource items from an AWS CloudFormation template | ||
// whose logical ID matches the provided name. Returns an error if not found. | ||
func (t *Template) GetCustomResourceWithName(name string) (*CustomResource, error) { | ||
if untyped, ok := t.Resources[name]; ok { | ||
switch resource := untyped.(type) { | ||
case *CustomResource: | ||
return resource, nil | ||
} | ||
} | ||
return nil, fmt.Errorf("resource %q of type CustomResource not found", name) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
AWSTemplateFormatVersion: '2010-09-09' | ||
Description: "Custom Resource Test" | ||
Resources: | ||
MyCustomResource: | ||
Type: Custom::MyResource | ||
Properties: | ||
ServiceToken: lambda.arn | ||
CustomProperty: property_value |