AssignInstance

valid {
    input.Body.InstanceId == STRING
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

AssignVolume

valid {
    input.Body.VolumeId == STRING
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

AssociateElasticIp

valid {
    input.Body.ElasticIp == STRING
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

AttachElasticLoadBalancer

valid {
    input.Body.ElasticLoadBalancerName == STRING
    input.Body.LayerId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CloneStack

enum_RootDeviceType := [ "ebs", "instance-store" ]
enum_SourceType := [ "git", "svn", "archive", "s3" ]

valid {
    input.Body.SourceStackId == STRING
    input.Body.Name == STRING
    input.Body.Region == STRING
    input.Body.VpcId == STRING
    input.Body.Attributes.Color == STRING
    input.Body.ServiceRoleArn == STRING
    input.Body.DefaultInstanceProfileArn == STRING
    input.Body.DefaultOs == STRING
    input.Body.HostnameTheme == STRING
    input.Body.DefaultAvailabilityZone == STRING
    input.Body.DefaultSubnetId == STRING
    input.Body.CustomJson == STRING
    input.Body.ConfigurationManager.Name == STRING
    input.Body.ConfigurationManager.Version == STRING
    input.Body.ChefConfiguration.ManageBerkshelf == BOOLEAN
    input.Body.ChefConfiguration.BerkshelfVersion == STRING
    input.Body.UseCustomCookbooks == BOOLEAN
    input.Body.UseOpsworksSecurityGroups == BOOLEAN
    input.Body.CustomCookbooksSource.Type == enum_SourceType[_]
    input.Body.CustomCookbooksSource.Url == STRING
    input.Body.CustomCookbooksSource.Username == STRING
    input.Body.CustomCookbooksSource.Password == STRING
    input.Body.CustomCookbooksSource.SshKey == STRING
    input.Body.CustomCookbooksSource.Revision == STRING
    input.Body.DefaultSshKeyName == STRING
    input.Body.ClonePermissions == BOOLEAN
    input.Body.CloneAppIds[_] == STRING
    input.Body.DefaultRootDeviceType == enum_RootDeviceType[_]
    input.Body.AgentVersion == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateApp

enum_AppType := [ "aws-flow-ruby", "java", "rails", "php", "nodejs", "static", "other" ]
enum_SourceType := [ "git", "svn", "archive", "s3" ]

valid {
    input.Body.StackId == STRING
    input.Body.Shortname == STRING
    input.Body.Name == STRING
    input.Body.Description == STRING
    input.Body.DataSources[_].Type == STRING
    input.Body.DataSources[_].Arn == STRING
    input.Body.DataSources[_].DatabaseName == STRING
    input.Body.Type == enum_AppType[_]
    input.Body.AppSource.Type == enum_SourceType[_]
    input.Body.AppSource.Url == STRING
    input.Body.AppSource.Username == STRING
    input.Body.AppSource.Password == STRING
    input.Body.AppSource.SshKey == STRING
    input.Body.AppSource.Revision == STRING
    input.Body.Domains[_] == STRING
    input.Body.EnableSsl == BOOLEAN
    input.Body.SslConfiguration.Certificate == STRING
    input.Body.SslConfiguration.PrivateKey == STRING
    input.Body.SslConfiguration.Chain == STRING
    input.Body.Attributes.DocumentRoot == STRING
    input.Body.Attributes.RailsEnv == STRING
    input.Body.Attributes.AutoBundleOnDeploy == STRING
    input.Body.Attributes.AwsFlowRubySettings == STRING
    input.Body.Environment[_].Key == STRING
    input.Body.Environment[_].Value == STRING
    input.Body.Environment[_].Secure == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateDeployment

enum_DeploymentCommandName := [ "install_dependencies", "update_dependencies", "update_custom_cookbooks", "execute_recipes", "configure", "setup", "deploy", "rollback", "start", "stop", "restart", "undeploy" ]

valid {
    input.Body.StackId == STRING
    input.Body.AppId == STRING
    input.Body.InstanceIds[_] == STRING
    input.Body.LayerIds[_] == STRING
    input.Body.Command.Name == enum_DeploymentCommandName[_]
    input.Body.Command.Args.STRING[_] == STRING
    input.Body.Comment == STRING
    input.Body.CustomJson == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateInstance

enum_Architecture := [ "x86_64", "i386" ]
enum_AutoScalingType := [ "load", "timer" ]
enum_RootDeviceType := [ "ebs", "instance-store" ]
enum_VolumeType := [ "gp2", "io1", "standard" ]

valid {
    input.Body.StackId == STRING
    input.Body.LayerIds[_] == STRING
    input.Body.InstanceType == STRING
    input.Body.AutoScalingType == enum_AutoScalingType[_]
    input.Body.Hostname == STRING
    input.Body.Os == STRING
    input.Body.AmiId == STRING
    input.Body.SshKeyName == STRING
    input.Body.AvailabilityZone == STRING
    input.Body.VirtualizationType == STRING
    input.Body.SubnetId == STRING
    input.Body.Architecture == enum_Architecture[_]
    input.Body.RootDeviceType == enum_RootDeviceType[_]
    input.Body.BlockDeviceMappings[_].DeviceName == STRING
    input.Body.BlockDeviceMappings[_].NoDevice == STRING
    input.Body.BlockDeviceMappings[_].VirtualName == STRING
    input.Body.BlockDeviceMappings[_].Ebs.SnapshotId == STRING
    input.Body.BlockDeviceMappings[_].Ebs.Iops == INTEGER
    input.Body.BlockDeviceMappings[_].Ebs.VolumeSize == INTEGER
    input.Body.BlockDeviceMappings[_].Ebs.VolumeType == enum_VolumeType[_]
    input.Body.BlockDeviceMappings[_].Ebs.DeleteOnTermination == BOOLEAN
    input.Body.InstallUpdatesOnBoot == BOOLEAN
    input.Body.EbsOptimized == BOOLEAN
    input.Body.AgentVersion == STRING
    input.Body.Tenancy == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateLayer

enum_CloudWatchLogsEncoding := [ "ascii", "big5", "big5hkscs", "cp037", "cp424", "cp437", "cp500", "cp720", "cp737", "cp775", "cp850", "cp852", "cp855", "cp856", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874", "cp875", "cp932", "cp949", "cp950", "cp1006", "cp1026", "cp1140", "cp1250", "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258", "euc_jp", "euc_jis_2004", "euc_jisx0213", "euc_kr", "gb2312", "gbk", "gb18030", "hz", "iso2022_jp", "iso2022_jp_1", "iso2022_jp_2", "iso2022_jp_2004", "iso2022_jp_3", "iso2022_jp_ext", "iso2022_kr", "latin_1", "iso8859_2", "iso8859_3", "iso8859_4", "iso8859_5", "iso8859_6", "iso8859_7", "iso8859_8", "iso8859_9", "iso8859_10", "iso8859_13", "iso8859_14", "iso8859_15", "iso8859_16", "johab", "koi8_r", "koi8_u", "mac_cyrillic", "mac_greek", "mac_iceland", "mac_latin2", "mac_roman", "mac_turkish", "ptcp154", "shift_jis", "shift_jis_2004", "shift_jisx0213", "utf_32", "utf_32_be", "utf_32_le", "utf_16", "utf_16_be", "utf_16_le", "utf_7", "utf_8", "utf_8_sig" ]
enum_CloudWatchLogsInitialPosition := [ "start_of_file", "end_of_file" ]
enum_CloudWatchLogsTimeZone := [ "LOCAL", "UTC" ]
enum_LayerType := [ "aws-flow-ruby", "ecs-cluster", "java-app", "lb", "web", "php-app", "rails-app", "nodejs-app", "memcached", "db-master", "monitoring-master", "custom" ]

valid {
    input.Body.StackId == STRING
    input.Body.Type == enum_LayerType[_]
    input.Body.Name == STRING
    input.Body.Shortname == STRING
    input.Body.Attributes.EcsClusterArn == STRING
    input.Body.Attributes.EnableHaproxyStats == STRING
    input.Body.Attributes.HaproxyStatsUrl == STRING
    input.Body.Attributes.HaproxyStatsUser == STRING
    input.Body.Attributes.HaproxyStatsPassword == STRING
    input.Body.Attributes.HaproxyHealthCheckUrl == STRING
    input.Body.Attributes.HaproxyHealthCheckMethod == STRING
    input.Body.Attributes.MysqlRootPassword == STRING
    input.Body.Attributes.MysqlRootPasswordUbiquitous == STRING
    input.Body.Attributes.GangliaUrl == STRING
    input.Body.Attributes.GangliaUser == STRING
    input.Body.Attributes.GangliaPassword == STRING
    input.Body.Attributes.MemcachedMemory == STRING
    input.Body.Attributes.NodejsVersion == STRING
    input.Body.Attributes.RubyVersion == STRING
    input.Body.Attributes.RubygemsVersion == STRING
    input.Body.Attributes.ManageBundler == STRING
    input.Body.Attributes.BundlerVersion == STRING
    input.Body.Attributes.RailsStack == STRING
    input.Body.Attributes.PassengerVersion == STRING
    input.Body.Attributes.Jvm == STRING
    input.Body.Attributes.JvmVersion == STRING
    input.Body.Attributes.JvmOptions == STRING
    input.Body.Attributes.JavaAppServer == STRING
    input.Body.Attributes.JavaAppServerVersion == STRING
    input.Body.CloudWatchLogsConfiguration.Enabled == BOOLEAN
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].LogGroupName == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].DatetimeFormat == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].TimeZone == enum_CloudWatchLogsTimeZone[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].File == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].FileFingerprintLines == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].MultiLineStartPattern == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].InitialPosition == enum_CloudWatchLogsInitialPosition[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].Encoding == enum_CloudWatchLogsEncoding[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BufferDuration == INTEGER
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BatchCount == INTEGER
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BatchSize == INTEGER
    input.Body.CustomInstanceProfileArn == STRING
    input.Body.CustomJson == STRING
    input.Body.CustomSecurityGroupIds[_] == STRING
    input.Body.Packages[_] == STRING
    input.Body.VolumeConfigurations[_].MountPoint == STRING
    input.Body.VolumeConfigurations[_].RaidLevel == INTEGER
    input.Body.VolumeConfigurations[_].NumberOfDisks == INTEGER
    input.Body.VolumeConfigurations[_].Size == INTEGER
    input.Body.VolumeConfigurations[_].VolumeType == STRING
    input.Body.VolumeConfigurations[_].Iops == INTEGER
    input.Body.VolumeConfigurations[_].Encrypted == BOOLEAN
    input.Body.EnableAutoHealing == BOOLEAN
    input.Body.AutoAssignElasticIps == BOOLEAN
    input.Body.AutoAssignPublicIps == BOOLEAN
    input.Body.CustomRecipes.Setup[_] == STRING
    input.Body.CustomRecipes.Configure[_] == STRING
    input.Body.CustomRecipes.Deploy[_] == STRING
    input.Body.CustomRecipes.Undeploy[_] == STRING
    input.Body.CustomRecipes.Shutdown[_] == STRING
    input.Body.InstallUpdatesOnBoot == BOOLEAN
    input.Body.UseEbsOptimizedInstances == BOOLEAN
    input.Body.LifecycleEventConfiguration.Shutdown.ExecutionTimeout == INTEGER
    input.Body.LifecycleEventConfiguration.Shutdown.DelayUntilElbConnectionsDrained == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateStack

enum_RootDeviceType := [ "ebs", "instance-store" ]
enum_SourceType := [ "git", "svn", "archive", "s3" ]

valid {
    input.Body.Name == STRING
    input.Body.Region == STRING
    input.Body.VpcId == STRING
    input.Body.Attributes.Color == STRING
    input.Body.ServiceRoleArn == STRING
    input.Body.DefaultInstanceProfileArn == STRING
    input.Body.DefaultOs == STRING
    input.Body.HostnameTheme == STRING
    input.Body.DefaultAvailabilityZone == STRING
    input.Body.DefaultSubnetId == STRING
    input.Body.CustomJson == STRING
    input.Body.ConfigurationManager.Name == STRING
    input.Body.ConfigurationManager.Version == STRING
    input.Body.ChefConfiguration.ManageBerkshelf == BOOLEAN
    input.Body.ChefConfiguration.BerkshelfVersion == STRING
    input.Body.UseCustomCookbooks == BOOLEAN
    input.Body.UseOpsworksSecurityGroups == BOOLEAN
    input.Body.CustomCookbooksSource.Type == enum_SourceType[_]
    input.Body.CustomCookbooksSource.Url == STRING
    input.Body.CustomCookbooksSource.Username == STRING
    input.Body.CustomCookbooksSource.Password == STRING
    input.Body.CustomCookbooksSource.SshKey == STRING
    input.Body.CustomCookbooksSource.Revision == STRING
    input.Body.DefaultSshKeyName == STRING
    input.Body.DefaultRootDeviceType == enum_RootDeviceType[_]
    input.Body.AgentVersion == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

CreateUserProfile

valid {
    input.Body.IamUserArn == STRING
    input.Body.SshUsername == STRING
    input.Body.SshPublicKey == STRING
    input.Body.AllowSelfManagement == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteApp

valid {
    input.Body.AppId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteInstance

valid {
    input.Body.InstanceId == STRING
    input.Body.DeleteElasticIp == BOOLEAN
    input.Body.DeleteVolumes == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteLayer

valid {
    input.Body.LayerId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteStack

valid {
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeleteUserProfile

valid {
    input.Body.IamUserArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeregisterEcsCluster

valid {
    input.Body.EcsClusterArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeregisterElasticIp

valid {
    input.Body.ElasticIp == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeregisterInstance

valid {
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeregisterRdsDbInstance

valid {
    input.Body.RdsDbInstanceArn == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DeregisterVolume

valid {
    input.Body.VolumeId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeAgentVersions

valid {
    input.Body.StackId == STRING
    input.Body.ConfigurationManager.Name == STRING
    input.Body.ConfigurationManager.Version == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeApps

valid {
    input.Body.StackId == STRING
    input.Body.AppIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeCommands

valid {
    input.Body.DeploymentId == STRING
    input.Body.InstanceId == STRING
    input.Body.CommandIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeDeployments

valid {
    input.Body.StackId == STRING
    input.Body.AppId == STRING
    input.Body.DeploymentIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeEcsClusters

valid {
    input.Body.EcsClusterArns[_] == STRING
    input.Body.StackId == STRING
    input.Body.NextToken == STRING
    input.Body.MaxResults == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeElasticIps

valid {
    input.Body.InstanceId == STRING
    input.Body.StackId == STRING
    input.Body.Ips[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeElasticLoadBalancers

valid {
    input.Body.StackId == STRING
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeInstances

valid {
    input.Body.StackId == STRING
    input.Body.LayerId == STRING
    input.Body.InstanceIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeLayers

valid {
    input.Body.StackId == STRING
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeLoadBasedAutoScaling

valid {
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeMyUserProfile

valid {
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeOperatingSystems

valid {
    input.Body.LayerIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribePermissions

valid {
    input.Body.IamUserArn == STRING
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeRaidArrays

valid {
    input.Body.InstanceId == STRING
    input.Body.StackId == STRING
    input.Body.RaidArrayIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeRdsDbInstances

valid {
    input.Body.StackId == STRING
    input.Body.RdsDbInstanceArns[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeServiceErrors

valid {
    input.Body.StackId == STRING
    input.Body.InstanceId == STRING
    input.Body.ServiceErrorIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeStackProvisioningParameters

valid {
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeStackSummary

valid {
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeStacks

valid {
    input.Body.StackIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeTimeBasedAutoScaling

valid {
    input.Body.InstanceIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeUserProfiles

valid {
    input.Body.IamUserArns[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DescribeVolumes

valid {
    input.Body.InstanceId == STRING
    input.Body.StackId == STRING
    input.Body.RaidArrayId == STRING
    input.Body.VolumeIds[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DetachElasticLoadBalancer

valid {
    input.Body.ElasticLoadBalancerName == STRING
    input.Body.LayerId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

DisassociateElasticIp

valid {
    input.Body.ElasticIp == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GetHostnameSuggestion

valid {
    input.Body.LayerId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

GrantAccess

valid {
    input.Body.InstanceId == STRING
    input.Body.ValidForInMinutes == INTEGER
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

ListTags

valid {
    input.Body.ResourceArn == STRING
    input.Body.MaxResults == INTEGER
    input.Body.NextToken == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RebootInstance

valid {
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterEcsCluster

valid {
    input.Body.EcsClusterArn == STRING
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterElasticIp

valid {
    input.Body.ElasticIp == STRING
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterInstance

valid {
    input.Body.StackId == STRING
    input.Body.Hostname == STRING
    input.Body.PublicIp == STRING
    input.Body.PrivateIp == STRING
    input.Body.RsaPublicKey == STRING
    input.Body.RsaPublicKeyFingerprint == STRING
    input.Body.InstanceIdentity.Document == STRING
    input.Body.InstanceIdentity.Signature == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterRdsDbInstance

valid {
    input.Body.StackId == STRING
    input.Body.RdsDbInstanceArn == STRING
    input.Body.DbUser == STRING
    input.Body.DbPassword == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

RegisterVolume

valid {
    input.Body.Ec2VolumeId == STRING
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

SetLoadBasedAutoScaling

valid {
    input.Body.LayerId == STRING
    input.Body.Enable == BOOLEAN
    input.Body.UpScaling.InstanceCount == INTEGER
    input.Body.UpScaling.ThresholdsWaitTime == INTEGER
    input.Body.UpScaling.IgnoreMetricsTime == INTEGER
    input.Body.UpScaling.CpuThreshold == DOUBLE
    input.Body.UpScaling.MemoryThreshold == DOUBLE
    input.Body.UpScaling.LoadThreshold == DOUBLE
    input.Body.UpScaling.Alarms[_] == STRING
    input.Body.DownScaling.InstanceCount == INTEGER
    input.Body.DownScaling.ThresholdsWaitTime == INTEGER
    input.Body.DownScaling.IgnoreMetricsTime == INTEGER
    input.Body.DownScaling.CpuThreshold == DOUBLE
    input.Body.DownScaling.MemoryThreshold == DOUBLE
    input.Body.DownScaling.LoadThreshold == DOUBLE
    input.Body.DownScaling.Alarms[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

SetPermission

valid {
    input.Body.StackId == STRING
    input.Body.IamUserArn == STRING
    input.Body.AllowSsh == BOOLEAN
    input.Body.AllowSudo == BOOLEAN
    input.Body.Level == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

SetTimeBasedAutoScaling

valid {
    input.Body.InstanceId == STRING
    input.Body.AutoScalingSchedule.Monday.STRING == STRING
    input.Body.AutoScalingSchedule.Tuesday.STRING == STRING
    input.Body.AutoScalingSchedule.Wednesday.STRING == STRING
    input.Body.AutoScalingSchedule.Thursday.STRING == STRING
    input.Body.AutoScalingSchedule.Friday.STRING == STRING
    input.Body.AutoScalingSchedule.Saturday.STRING == STRING
    input.Body.AutoScalingSchedule.Sunday.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

StartInstance

valid {
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

StartStack

valid {
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

StopInstance

valid {
    input.Body.InstanceId == STRING
    input.Body.Force == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

StopStack

valid {
    input.Body.StackId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

TagResource

valid {
    input.Body.ResourceArn == STRING
    input.Body.Tags.STRING == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UnassignInstance

valid {
    input.Body.InstanceId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UnassignVolume

valid {
    input.Body.VolumeId == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UntagResource

valid {
    input.Body.ResourceArn == STRING
    input.Body.TagKeys[_] == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateApp

enum_AppType := [ "aws-flow-ruby", "java", "rails", "php", "nodejs", "static", "other" ]
enum_SourceType := [ "git", "svn", "archive", "s3" ]

valid {
    input.Body.AppId == STRING
    input.Body.Name == STRING
    input.Body.Description == STRING
    input.Body.DataSources[_].Type == STRING
    input.Body.DataSources[_].Arn == STRING
    input.Body.DataSources[_].DatabaseName == STRING
    input.Body.Type == enum_AppType[_]
    input.Body.AppSource.Type == enum_SourceType[_]
    input.Body.AppSource.Url == STRING
    input.Body.AppSource.Username == STRING
    input.Body.AppSource.Password == STRING
    input.Body.AppSource.SshKey == STRING
    input.Body.AppSource.Revision == STRING
    input.Body.Domains[_] == STRING
    input.Body.EnableSsl == BOOLEAN
    input.Body.SslConfiguration.Certificate == STRING
    input.Body.SslConfiguration.PrivateKey == STRING
    input.Body.SslConfiguration.Chain == STRING
    input.Body.Attributes.DocumentRoot == STRING
    input.Body.Attributes.RailsEnv == STRING
    input.Body.Attributes.AutoBundleOnDeploy == STRING
    input.Body.Attributes.AwsFlowRubySettings == STRING
    input.Body.Environment[_].Key == STRING
    input.Body.Environment[_].Value == STRING
    input.Body.Environment[_].Secure == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateElasticIp

valid {
    input.Body.ElasticIp == STRING
    input.Body.Name == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateInstance

enum_Architecture := [ "x86_64", "i386" ]
enum_AutoScalingType := [ "load", "timer" ]

valid {
    input.Body.InstanceId == STRING
    input.Body.LayerIds[_] == STRING
    input.Body.InstanceType == STRING
    input.Body.AutoScalingType == enum_AutoScalingType[_]
    input.Body.Hostname == STRING
    input.Body.Os == STRING
    input.Body.AmiId == STRING
    input.Body.SshKeyName == STRING
    input.Body.Architecture == enum_Architecture[_]
    input.Body.InstallUpdatesOnBoot == BOOLEAN
    input.Body.EbsOptimized == BOOLEAN
    input.Body.AgentVersion == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateLayer

enum_CloudWatchLogsEncoding := [ "ascii", "big5", "big5hkscs", "cp037", "cp424", "cp437", "cp500", "cp720", "cp737", "cp775", "cp850", "cp852", "cp855", "cp856", "cp857", "cp858", "cp860", "cp861", "cp862", "cp863", "cp864", "cp865", "cp866", "cp869", "cp874", "cp875", "cp932", "cp949", "cp950", "cp1006", "cp1026", "cp1140", "cp1250", "cp1251", "cp1252", "cp1253", "cp1254", "cp1255", "cp1256", "cp1257", "cp1258", "euc_jp", "euc_jis_2004", "euc_jisx0213", "euc_kr", "gb2312", "gbk", "gb18030", "hz", "iso2022_jp", "iso2022_jp_1", "iso2022_jp_2", "iso2022_jp_2004", "iso2022_jp_3", "iso2022_jp_ext", "iso2022_kr", "latin_1", "iso8859_2", "iso8859_3", "iso8859_4", "iso8859_5", "iso8859_6", "iso8859_7", "iso8859_8", "iso8859_9", "iso8859_10", "iso8859_13", "iso8859_14", "iso8859_15", "iso8859_16", "johab", "koi8_r", "koi8_u", "mac_cyrillic", "mac_greek", "mac_iceland", "mac_latin2", "mac_roman", "mac_turkish", "ptcp154", "shift_jis", "shift_jis_2004", "shift_jisx0213", "utf_32", "utf_32_be", "utf_32_le", "utf_16", "utf_16_be", "utf_16_le", "utf_7", "utf_8", "utf_8_sig" ]
enum_CloudWatchLogsInitialPosition := [ "start_of_file", "end_of_file" ]
enum_CloudWatchLogsTimeZone := [ "LOCAL", "UTC" ]

valid {
    input.Body.LayerId == STRING
    input.Body.Name == STRING
    input.Body.Shortname == STRING
    input.Body.Attributes.EcsClusterArn == STRING
    input.Body.Attributes.EnableHaproxyStats == STRING
    input.Body.Attributes.HaproxyStatsUrl == STRING
    input.Body.Attributes.HaproxyStatsUser == STRING
    input.Body.Attributes.HaproxyStatsPassword == STRING
    input.Body.Attributes.HaproxyHealthCheckUrl == STRING
    input.Body.Attributes.HaproxyHealthCheckMethod == STRING
    input.Body.Attributes.MysqlRootPassword == STRING
    input.Body.Attributes.MysqlRootPasswordUbiquitous == STRING
    input.Body.Attributes.GangliaUrl == STRING
    input.Body.Attributes.GangliaUser == STRING
    input.Body.Attributes.GangliaPassword == STRING
    input.Body.Attributes.MemcachedMemory == STRING
    input.Body.Attributes.NodejsVersion == STRING
    input.Body.Attributes.RubyVersion == STRING
    input.Body.Attributes.RubygemsVersion == STRING
    input.Body.Attributes.ManageBundler == STRING
    input.Body.Attributes.BundlerVersion == STRING
    input.Body.Attributes.RailsStack == STRING
    input.Body.Attributes.PassengerVersion == STRING
    input.Body.Attributes.Jvm == STRING
    input.Body.Attributes.JvmVersion == STRING
    input.Body.Attributes.JvmOptions == STRING
    input.Body.Attributes.JavaAppServer == STRING
    input.Body.Attributes.JavaAppServerVersion == STRING
    input.Body.CloudWatchLogsConfiguration.Enabled == BOOLEAN
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].LogGroupName == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].DatetimeFormat == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].TimeZone == enum_CloudWatchLogsTimeZone[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].File == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].FileFingerprintLines == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].MultiLineStartPattern == STRING
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].InitialPosition == enum_CloudWatchLogsInitialPosition[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].Encoding == enum_CloudWatchLogsEncoding[_]
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BufferDuration == INTEGER
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BatchCount == INTEGER
    input.Body.CloudWatchLogsConfiguration.LogStreams[_].BatchSize == INTEGER
    input.Body.CustomInstanceProfileArn == STRING
    input.Body.CustomJson == STRING
    input.Body.CustomSecurityGroupIds[_] == STRING
    input.Body.Packages[_] == STRING
    input.Body.VolumeConfigurations[_].MountPoint == STRING
    input.Body.VolumeConfigurations[_].RaidLevel == INTEGER
    input.Body.VolumeConfigurations[_].NumberOfDisks == INTEGER
    input.Body.VolumeConfigurations[_].Size == INTEGER
    input.Body.VolumeConfigurations[_].VolumeType == STRING
    input.Body.VolumeConfigurations[_].Iops == INTEGER
    input.Body.VolumeConfigurations[_].Encrypted == BOOLEAN
    input.Body.EnableAutoHealing == BOOLEAN
    input.Body.AutoAssignElasticIps == BOOLEAN
    input.Body.AutoAssignPublicIps == BOOLEAN
    input.Body.CustomRecipes.Setup[_] == STRING
    input.Body.CustomRecipes.Configure[_] == STRING
    input.Body.CustomRecipes.Deploy[_] == STRING
    input.Body.CustomRecipes.Undeploy[_] == STRING
    input.Body.CustomRecipes.Shutdown[_] == STRING
    input.Body.InstallUpdatesOnBoot == BOOLEAN
    input.Body.UseEbsOptimizedInstances == BOOLEAN
    input.Body.LifecycleEventConfiguration.Shutdown.ExecutionTimeout == INTEGER
    input.Body.LifecycleEventConfiguration.Shutdown.DelayUntilElbConnectionsDrained == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateMyUserProfile

valid {
    input.Body.SshPublicKey == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateRdsDbInstance

valid {
    input.Body.RdsDbInstanceArn == STRING
    input.Body.DbUser == STRING
    input.Body.DbPassword == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateStack

enum_RootDeviceType := [ "ebs", "instance-store" ]
enum_SourceType := [ "git", "svn", "archive", "s3" ]

valid {
    input.Body.StackId == STRING
    input.Body.Name == STRING
    input.Body.Attributes.Color == STRING
    input.Body.ServiceRoleArn == STRING
    input.Body.DefaultInstanceProfileArn == STRING
    input.Body.DefaultOs == STRING
    input.Body.HostnameTheme == STRING
    input.Body.DefaultAvailabilityZone == STRING
    input.Body.DefaultSubnetId == STRING
    input.Body.CustomJson == STRING
    input.Body.ConfigurationManager.Name == STRING
    input.Body.ConfigurationManager.Version == STRING
    input.Body.ChefConfiguration.ManageBerkshelf == BOOLEAN
    input.Body.ChefConfiguration.BerkshelfVersion == STRING
    input.Body.UseCustomCookbooks == BOOLEAN
    input.Body.CustomCookbooksSource.Type == enum_SourceType[_]
    input.Body.CustomCookbooksSource.Url == STRING
    input.Body.CustomCookbooksSource.Username == STRING
    input.Body.CustomCookbooksSource.Password == STRING
    input.Body.CustomCookbooksSource.SshKey == STRING
    input.Body.CustomCookbooksSource.Revision == STRING
    input.Body.DefaultSshKeyName == STRING
    input.Body.DefaultRootDeviceType == enum_RootDeviceType[_]
    input.Body.UseOpsworksSecurityGroups == BOOLEAN
    input.Body.AgentVersion == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateUserProfile

valid {
    input.Body.IamUserArn == STRING
    input.Body.SshUsername == STRING
    input.Body.SshPublicKey == STRING
    input.Body.AllowSelfManagement == BOOLEAN
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}

UpdateVolume

valid {
    input.Body.VolumeId == STRING
    input.Body.Name == STRING
    input.Body.MountPoint == STRING
    input.ProviderMetadata.Account == STRING
    input.ProviderMetadata.AccessKeyId == STRING
    input.ProviderMetadata.Region == STRING
}