package awsgreengrassv2


// Properties for defining a `CfnComponentVersion`.
//
// Example:
//   // The code below shows an example of how to instantiate this type.
//   // The values are placeholders you should change.
//   import "github.com/aws/aws-cdk-go/awscdk"
//
//   cfnComponentVersionProps := &CfnComponentVersionProps{
//   	InlineRecipe: jsii.String("inlineRecipe"),
//   	LambdaFunction: &LambdaFunctionRecipeSourceProperty{
//   		ComponentDependencies: map[string]interface{}{
//   			"componentDependenciesKey": &ComponentDependencyRequirementProperty{
//   				"dependencyType": jsii.String("dependencyType"),
//   				"versionRequirement": jsii.String("versionRequirement"),
//   			},
//   		},
//   		ComponentLambdaParameters: &LambdaExecutionParametersProperty{
//   			EnvironmentVariables: map[string]*string{
//   				"environmentVariablesKey": jsii.String("environmentVariables"),
//   			},
//   			EventSources: []interface{}{
//   				&LambdaEventSourceProperty{
//   					Topic: jsii.String("topic"),
//   					Type: jsii.String("type"),
//   				},
//   			},
//   			ExecArgs: []*string{
//   				jsii.String("execArgs"),
//   			},
//   			InputPayloadEncodingType: jsii.String("inputPayloadEncodingType"),
//   			LinuxProcessParams: &LambdaLinuxProcessParamsProperty{
//   				ContainerParams: &LambdaContainerParamsProperty{
//   					Devices: []interface{}{
//   						&LambdaDeviceMountProperty{
//   							AddGroupOwner: jsii.Boolean(false),
//   							Path: jsii.String("path"),
//   							Permission: jsii.String("permission"),
//   						},
//   					},
//   					MemorySizeInKb: jsii.Number(123),
//   					MountRoSysfs: jsii.Boolean(false),
//   					Volumes: []interface{}{
//   						&LambdaVolumeMountProperty{
//   							AddGroupOwner: jsii.Boolean(false),
//   							DestinationPath: jsii.String("destinationPath"),
//   							Permission: jsii.String("permission"),
//   							SourcePath: jsii.String("sourcePath"),
//   						},
//   					},
//   				},
//   				IsolationMode: jsii.String("isolationMode"),
//   			},
//   			MaxIdleTimeInSeconds: jsii.Number(123),
//   			MaxInstancesCount: jsii.Number(123),
//   			MaxQueueSize: jsii.Number(123),
//   			Pinned: jsii.Boolean(false),
//   			StatusTimeoutInSeconds: jsii.Number(123),
//   			TimeoutInSeconds: jsii.Number(123),
//   		},
//   		ComponentName: jsii.String("componentName"),
//   		ComponentPlatforms: []interface{}{
//   			&ComponentPlatformProperty{
//   				Attributes: map[string]*string{
//   					"attributesKey": jsii.String("attributes"),
//   				},
//   				Name: jsii.String("name"),
//   			},
//   		},
//   		ComponentVersion: jsii.String("componentVersion"),
//   		LambdaArn: jsii.String("lambdaArn"),
//   	},
//   	Tags: map[string]*string{
//   		"tagsKey": jsii.String("tags"),
//   	},
//   }
//
// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html
//
type CfnComponentVersionProps struct {
	// The recipe to use to create the component.
	//
	// The recipe defines the component's metadata, parameters, dependencies, lifecycle, artifacts, and platform compatibility.
	//
	// You must specify either `InlineRecipe` or `LambdaFunction` .
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html#cfn-greengrassv2-componentversion-inlinerecipe
	//
	InlineRecipe *string `field:"optional" json:"inlineRecipe" yaml:"inlineRecipe"`
	// The parameters to create a component from a Lambda function.
	//
	// You must specify either `InlineRecipe` or `LambdaFunction` .
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html#cfn-greengrassv2-componentversion-lambdafunction
	//
	LambdaFunction interface{} `field:"optional" json:"lambdaFunction" yaml:"lambdaFunction"`
	// Application-specific metadata to attach to the component version.
	//
	// You can use tags in IAM policies to control access to AWS IoT Greengrass resources. You can also use tags to categorize your resources. For more information, see [Tag your AWS IoT Greengrass Version 2 resources](https://docs.aws.amazon.com/greengrass/v2/developerguide/tag-resources.html) in the *AWS IoT Greengrass V2 Developer Guide* .
	//
	// This `Json` property type is processed as a map of key-value pairs. It uses the following format, which is different from most `Tags` implementations in AWS CloudFormation templates.
	//
	// ```json
	// "Tags": { "KeyName0": "value", "KeyName1": "value", "KeyName2": "value"
	// }
	// ```.
	// See: http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-greengrassv2-componentversion.html#cfn-greengrassv2-componentversion-tags
	//
	Tags *map[string]*string `field:"optional" json:"tags" yaml:"tags"`
}

