Skip to content

Commit

Permalink
fix(schema): CloudFormation Updates (#342)
Browse files Browse the repository at this point in the history
Co-authored-by: Paul Maddox <paul.maddox@gmail.com>
  • Loading branch information
github-actions[bot] and PaulMaddox committed Jan 29, 2021
1 parent 42c9ab0 commit f047bed
Show file tree
Hide file tree
Showing 18 changed files with 975 additions and 51 deletions.
26 changes: 26 additions & 0 deletions cloudformation/all.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ import (
"github.com/awslabs/goformation/v4/cloudformation/lambda"
"github.com/awslabs/goformation/v4/cloudformation/licensemanager"
"github.com/awslabs/goformation/v4/cloudformation/logs"
"github.com/awslabs/goformation/v4/cloudformation/lookoutvision"
"github.com/awslabs/goformation/v4/cloudformation/macie"
"github.com/awslabs/goformation/v4/cloudformation/managedblockchain"
"github.com/awslabs/goformation/v4/cloudformation/mediaconnect"
Expand Down Expand Up @@ -598,6 +599,7 @@ func AllResources() map[string]Resource {
"AWS::Logs::LogStream": &logs.LogStream{},
"AWS::Logs::MetricFilter": &logs.MetricFilter{},
"AWS::Logs::SubscriptionFilter": &logs.SubscriptionFilter{},
"AWS::LookoutVision::Project": &lookoutvision.Project{},
"AWS::MSK::Cluster": &msk.Cluster{},
"AWS::MWAA::Environment": &mwaa.Environment{},
"AWS::Macie::CustomDataIdentifier": &macie.CustomDataIdentifier{},
Expand Down Expand Up @@ -11556,6 +11558,30 @@ func (t *Template) GetLogsSubscriptionFilterWithName(name string) (*logs.Subscri
return nil, fmt.Errorf("resource %q of type logs.SubscriptionFilter not found", name)
}

// GetAllLookoutVisionProjectResources retrieves all lookoutvision.Project items from an AWS CloudFormation template
func (t *Template) GetAllLookoutVisionProjectResources() map[string]*lookoutvision.Project {
results := map[string]*lookoutvision.Project{}
for name, untyped := range t.Resources {
switch resource := untyped.(type) {
case *lookoutvision.Project:
results[name] = resource
}
}
return results
}

// GetLookoutVisionProjectWithName retrieves all lookoutvision.Project items from an AWS CloudFormation template
// whose logical ID matches the provided name. Returns an error if not found.
func (t *Template) GetLookoutVisionProjectWithName(name string) (*lookoutvision.Project, error) {
if untyped, ok := t.Resources[name]; ok {
switch resource := untyped.(type) {
case *lookoutvision.Project:
return resource, nil
}
}
return nil, fmt.Errorf("resource %q of type lookoutvision.Project not found", name)
}

// GetAllMSKClusterResources retrieves all msk.Cluster items from an AWS CloudFormation template
func (t *Template) GetAllMSKClusterResources() map[string]*msk.Cluster {
results := map[string]*msk.Cluster{}
Expand Down
5 changes: 5 additions & 0 deletions cloudformation/amazonmq/aws-amazonmq-configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,11 @@ import (
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-configuration.html
type Configuration struct {

// AuthenticationStrategy AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-configuration.html#cfn-amazonmq-configuration-authenticationstrategy
AuthenticationStrategy string `json:"AuthenticationStrategy,omitempty"`

// Data AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-amazonmq-configuration.html#cfn-amazonmq-configuration-data
Expand Down
5 changes: 5 additions & 0 deletions cloudformation/apigatewayv2/aws-apigatewayv2-stage.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ type Stage struct {
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesslogsettings
AccessLogSettings *Stage_AccessLogSettings `json:"AccessLogSettings,omitempty"`

// AccessPolicyId AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-accesspolicyid
AccessPolicyId string `json:"AccessPolicyId,omitempty"`

// ApiId AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigatewayv2-stage.html#cfn-apigatewayv2-stage-apiid
Expand Down
35 changes: 35 additions & 0 deletions cloudformation/appflow/aws-appflow-flow_idfieldnameslist.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package appflow

import (
"github.com/awslabs/goformation/v4/cloudformation/policies"
)

// Flow_IdFieldNamesList AWS CloudFormation Resource (AWS::AppFlow::Flow.IdFieldNamesList)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-idfieldnameslist.html
type Flow_IdFieldNamesList struct {

// IdFieldNamesList AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-idfieldnameslist.html#cfn-appflow-flow-idfieldnameslist-idfieldnameslist
IdFieldNamesList []string `json:"IdFieldNamesList,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

// AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy
AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"`

// AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource
AWSCloudFormationDependsOn []string `json:"-"`

// AWSCloudFormationMetadata stores structured data associated with this resource
AWSCloudFormationMetadata map[string]interface{} `json:"-"`

// AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created
AWSCloudFormationCondition string `json:"-"`
}

// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *Flow_IdFieldNamesList) AWSCloudFormationType() string {
return "AWS::AppFlow::Flow.IdFieldNamesList"
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,21 @@ type Flow_SalesforceDestinationProperties struct {
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-errorhandlingconfig
ErrorHandlingConfig *Flow_ErrorHandlingConfig `json:"ErrorHandlingConfig,omitempty"`

// IdFieldNames AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-idfieldnames
IdFieldNames *Flow_IdFieldNamesList `json:"IdFieldNames,omitempty"`

// Object AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-object
Object string `json:"Object,omitempty"`

// WriteOperationType AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-appflow-flow-salesforcedestinationproperties.html#cfn-appflow-flow-salesforcedestinationproperties-writeoperationtype
WriteOperationType string `json:"WriteOperationType,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

Expand Down
5 changes: 5 additions & 0 deletions cloudformation/ecs/aws-ecs-cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,11 @@ type Cluster struct {
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-clustersettings
ClusterSettings []Cluster_ClusterSettings `json:"ClusterSettings,omitempty"`

// Configuration AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-configuration
Configuration *Cluster_ClusterConfiguration `json:"Configuration,omitempty"`

// DefaultCapacityProviderStrategy AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-ecs-cluster.html#cfn-ecs-cluster-defaultcapacityproviderstrategy
Expand Down
35 changes: 35 additions & 0 deletions cloudformation/ecs/aws-ecs-cluster_clusterconfiguration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package ecs

import (
"github.com/awslabs/goformation/v4/cloudformation/policies"
)

// Cluster_ClusterConfiguration AWS CloudFormation Resource (AWS::ECS::Cluster.ClusterConfiguration)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clusterconfiguration.html
type Cluster_ClusterConfiguration struct {

// ExecuteCommandConfiguration AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-clusterconfiguration.html#cfn-ecs-cluster-clusterconfiguration-executecommandconfiguration
ExecuteCommandConfiguration *Cluster_ExecuteCommandConfiguration `json:"ExecuteCommandConfiguration,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

// AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy
AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"`

// AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource
AWSCloudFormationDependsOn []string `json:"-"`

// AWSCloudFormationMetadata stores structured data associated with this resource
AWSCloudFormationMetadata map[string]interface{} `json:"-"`

// AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created
AWSCloudFormationCondition string `json:"-"`
}

// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *Cluster_ClusterConfiguration) AWSCloudFormationType() string {
return "AWS::ECS::Cluster.ClusterConfiguration"
}
45 changes: 45 additions & 0 deletions cloudformation/ecs/aws-ecs-cluster_executecommandconfiguration.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package ecs

import (
"github.com/awslabs/goformation/v4/cloudformation/policies"
)

// Cluster_ExecuteCommandConfiguration AWS CloudFormation Resource (AWS::ECS::Cluster.ExecuteCommandConfiguration)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html
type Cluster_ExecuteCommandConfiguration struct {

// KmsKeyId AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-kmskeyid
KmsKeyId string `json:"KmsKeyId,omitempty"`

// LogConfiguration AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-logconfiguration
LogConfiguration *Cluster_ExecuteCommandLogConfiguration `json:"LogConfiguration,omitempty"`

// Logging AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandconfiguration.html#cfn-ecs-cluster-executecommandconfiguration-logging
Logging string `json:"Logging,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

// AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy
AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"`

// AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource
AWSCloudFormationDependsOn []string `json:"-"`

// AWSCloudFormationMetadata stores structured data associated with this resource
AWSCloudFormationMetadata map[string]interface{} `json:"-"`

// AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created
AWSCloudFormationCondition string `json:"-"`
}

// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *Cluster_ExecuteCommandConfiguration) AWSCloudFormationType() string {
return "AWS::ECS::Cluster.ExecuteCommandConfiguration"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package ecs

import (
"github.com/awslabs/goformation/v4/cloudformation/policies"
)

// Cluster_ExecuteCommandLogConfiguration AWS CloudFormation Resource (AWS::ECS::Cluster.ExecuteCommandLogConfiguration)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html
type Cluster_ExecuteCommandLogConfiguration struct {

// CloudWatchEncryptionEnabled AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-cloudwatchencryptionenabled
CloudWatchEncryptionEnabled bool `json:"CloudWatchEncryptionEnabled,omitempty"`

// CloudWatchLogGroupName AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-cloudwatchloggroupname
CloudWatchLogGroupName string `json:"CloudWatchLogGroupName,omitempty"`

// S3BucketName AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3bucketname
S3BucketName string `json:"S3BucketName,omitempty"`

// S3EncryptionEnabled AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3encryptionenabled
S3EncryptionEnabled bool `json:"S3EncryptionEnabled,omitempty"`

// S3KeyPrefix AWS CloudFormation Property
// Required: false
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-ecs-cluster-executecommandlogconfiguration.html#cfn-ecs-cluster-executecommandlogconfiguration-s3keyprefix
S3KeyPrefix string `json:"S3KeyPrefix,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

// AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy
AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"`

// AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource
AWSCloudFormationDependsOn []string `json:"-"`

// AWSCloudFormationMetadata stores structured data associated with this resource
AWSCloudFormationMetadata map[string]interface{} `json:"-"`

// AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created
AWSCloudFormationCondition string `json:"-"`
}

// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *Cluster_ExecuteCommandLogConfiguration) AWSCloudFormationType() string {
return "AWS::ECS::Cluster.ExecuteCommandLogConfiguration"
}
106 changes: 106 additions & 0 deletions cloudformation/lookoutvision/aws-lookoutvision-project.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
package lookoutvision

import (
"bytes"
"encoding/json"
"fmt"

"github.com/awslabs/goformation/v4/cloudformation/policies"
)

// Project AWS CloudFormation Resource (AWS::LookoutVision::Project)
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lookoutvision-project.html
type Project struct {

// ProjectName AWS CloudFormation Property
// Required: true
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-lookoutvision-project.html#cfn-lookoutvision-project-projectname
ProjectName string `json:"ProjectName,omitempty"`

// AWSCloudFormationDeletionPolicy represents a CloudFormation DeletionPolicy
AWSCloudFormationDeletionPolicy policies.DeletionPolicy `json:"-"`

// AWSCloudFormationUpdateReplacePolicy represents a CloudFormation UpdateReplacePolicy
AWSCloudFormationUpdateReplacePolicy policies.UpdateReplacePolicy `json:"-"`

// AWSCloudFormationDependsOn stores the logical ID of the resources to be created before this resource
AWSCloudFormationDependsOn []string `json:"-"`

// AWSCloudFormationMetadata stores structured data associated with this resource
AWSCloudFormationMetadata map[string]interface{} `json:"-"`

// AWSCloudFormationCondition stores the logical ID of the condition that must be satisfied for this resource to be created
AWSCloudFormationCondition string `json:"-"`
}

// AWSCloudFormationType returns the AWS CloudFormation resource type
func (r *Project) AWSCloudFormationType() string {
return "AWS::LookoutVision::Project"
}

// MarshalJSON is a custom JSON marshalling hook that embeds this object into
// an AWS CloudFormation JSON resource's 'Properties' field and adds a 'Type'.
func (r Project) MarshalJSON() ([]byte, error) {
type Properties Project
return json.Marshal(&struct {
Type string
Properties Properties
DependsOn []string `json:"DependsOn,omitempty"`
Metadata map[string]interface{} `json:"Metadata,omitempty"`
DeletionPolicy policies.DeletionPolicy `json:"DeletionPolicy,omitempty"`
UpdateReplacePolicy policies.UpdateReplacePolicy `json:"UpdateReplacePolicy,omitempty"`
Condition string `json:"Condition,omitempty"`
}{
Type: r.AWSCloudFormationType(),
Properties: (Properties)(r),
DependsOn: r.AWSCloudFormationDependsOn,
Metadata: r.AWSCloudFormationMetadata,
DeletionPolicy: r.AWSCloudFormationDeletionPolicy,
UpdateReplacePolicy: r.AWSCloudFormationUpdateReplacePolicy,
Condition: r.AWSCloudFormationCondition,
})
}

// UnmarshalJSON is a custom JSON unmarshalling hook that strips the outer
// AWS CloudFormation resource object, and just keeps the 'Properties' field.
func (r *Project) UnmarshalJSON(b []byte) error {
type Properties Project
res := &struct {
Type string
Properties *Properties
DependsOn []string
Metadata map[string]interface{}
DeletionPolicy string
UpdateReplacePolicy string
Condition string
}{}

dec := json.NewDecoder(bytes.NewReader(b))
dec.DisallowUnknownFields() // Force error if unknown field is found

if err := dec.Decode(&res); err != nil {
fmt.Printf("ERROR: %s\n", err)
return err
}

// If the resource has no Properties set, it could be nil
if res.Properties != nil {
*r = Project(*res.Properties)
}
if res.DependsOn != nil {
r.AWSCloudFormationDependsOn = res.DependsOn
}
if res.Metadata != nil {
r.AWSCloudFormationMetadata = res.Metadata
}
if res.DeletionPolicy != "" {
r.AWSCloudFormationDeletionPolicy = policies.DeletionPolicy(res.DeletionPolicy)
}
if res.UpdateReplacePolicy != "" {
r.AWSCloudFormationUpdateReplacePolicy = policies.UpdateReplacePolicy(res.UpdateReplacePolicy)
}
if res.Condition != "" {
r.AWSCloudFormationCondition = res.Condition
}
return nil
}

0 comments on commit f047bed

Please sign in to comment.