AWS Lambda Function - Resource block vs Module

Description :
I'm seeing differing outcomes when running a simple test against Lambda functions to ensure kms_key_arn is passed when creating the resource. I have one scenario where the function is created in a resource block and another through a module passing in variables. I've extracted the required parts from the wider tf project into a stripped down sample test case to raise this issue.
The test passes for the resource block and fails as below for the module. I have tracked this down to the kms_key_arn reference within the plan:
Success (resource_block - L1362):
...
                        "kms_key_arn": {
                            "references": [
                                "aws_kms_key.kms_key_secrets"
                            ]
                        },
...

Faillure (module w/ variables - L1690):
...
                                    "kms_key_arn": {
                                        "references": [
                                            "var.lambda_kms_key"
                                        ]
                                    },
...

Is this expected behaviour or a bug? Is there a way around it?
To Reproduce

TF plan json with some info redacted

{"format_version":"0.1","terraform_version":"0.13.2","variables":{"privatelink_component":{"value":"privatelink"},"privatelink_component_short_name":{"value":"plink"},"privatelink_cw_schedule":{"value":"rate(1 minute)"},"privatelink_lambda_cw_metric_flag":{"value":true},"privatelink_lambda_handler":{"value":"populate_NLB_TG_with_ALB.lambda_handler"},"privatelink_lambda_invocations_before_deregister":{"value":3},"privatelink_lambda_max_lookup":{"value":50},"privatelink_lambda_runtime":{"value":"python2.7"},"privatelink_lambda_s3_force_destroy":{"value":true},"privatelink_lambda_timeout":{"value":300},"privatelink_nlb_targetgroup_port":{"value":443},"privatelink_s3_code_bucket":{"value":"<bucket_name>"},"privatelink_s3_code_key":{"value":"<bucket_key>"}},"planned_values":{"root_module":{"resources":[{"address":"aws_kms_key.kms_key_secrets","mode":"managed","type":"aws_kms_key","name":"kms_key_secrets","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":30,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":{"Name":"test"}}},{"address":"aws_lambda_function.lambda_function_test","mode":"managed","type":"aws_lambda_function","name":"lambda_function_test","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"dead_letter_config":[],"description":null,"environment":[],"file_system_config":[],"filename":null,"function_name":"testlambdafunction","handler":"app/index.handler","layers":null,"memory_size":128,"publish":false,"reserved_concurrent_executions":-1,"role":"test-role","runtime":"nodejs12.x","s3_bucket":"test-bucket","s3_key":"test-key","s3_object_version":"test-version","tags":{"Name":"test"},"timeout":60,"timeouts":null,"vpc_config":[]}}],"child_modules":[{"resources":[{"address":"module.privatelink.aws_cloudwatch_event_rule.cw_nlb_alb","mode":"managed","type":"aws_cloudwatch_event_rule","name":"cw_nlb_alb","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"description":"monitor alb events","event_pattern":null,"is_enabled":true,"name":"cloudwatcheventprivatelink","name_prefix":null,"role_arn":null,"schedule_expression":"rate(1 minute)","tags":{"Name":"test"}}},{"address":"module.privatelink.aws_cloudwatch_event_target.cw_target_privatelink","mode":"managed","type":"aws_cloudwatch_event_target","name":"cw_target_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"batch_target":[],"ecs_target":[],"input":null,"input_path":null,"input_transformer":[],"kinesis_target":[],"role_arn":null,"rule":"cloudwatcheventprivatelink","run_command_targets":[],"sqs_target":[]}},{"address":"module.privatelink.aws_iam_policy.iam_policy_privatelink_lambda","mode":"managed","type":"aws_iam_policy","name":"iam_policy_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"description":null,"name":"default-privatelink-lambda","name_prefix":null,"path":"/"}},{"address":"module.privatelink.aws_iam_role.iam_role_privatelink_lambda","mode":"managed","type":"aws_iam_role","name":"iam_role_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"assume_role_policy":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","description":null,"force_detach_policies":false,"max_session_duration":3600,"name":"default-privatelinklambdaexecutionrole","name_prefix":null,"path":"/","permissions_boundary":null,"tags":{"Name":"test"}}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"policy_arn":"arn:aws:iam::aws:policy/AWSLambdaExecute","role":"default-privatelinklambdaexecutionrole"}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_custom","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_custom","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"role":"default-privatelinklambdaexecutionrole"}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_vpc","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_vpc","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"policy_arn":"arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole","role":"default-privatelinklambdaexecutionrole"}},{"address":"module.privatelink.aws_lambda_function.lambda_function_privatelink","mode":"managed","type":"aws_lambda_function","name":"lambda_function_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"dead_letter_config":[],"description":null,"environment":[{}],"file_system_config":[],"filename":null,"function_name":"privatelinklambda","handler":"populate_NLB_TG_with_ALB.lambda_handler","layers":null,"memory_size":128,"publish":false,"reserved_concurrent_executions":-1,"runtime":"python2.7","s3_bucket":"<bucket_name>","s3_key":"<bucket_key>","s3_object_version":null,"tags":{"Name":"test"},"timeout":300,"timeouts":null,"vpc_config":[]}},{"address":"module.privatelink.aws_lambda_permission.cw_privatelink","mode":"managed","type":"aws_lambda_permission","name":"cw_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"action":"lambda:InvokeFunction","event_source_token":null,"function_name":"privatelinklambda","principal":"events.amazonaws.com","qualifier":null,"source_account":null,"statement_id":"AllowExecutionFromCloudWatch","statement_id_prefix":null}},{"address":"module.privatelink.aws_lb_target_group.nlb_tg_privatelink","mode":"managed","type":"aws_lb_target_group","name":"nlb_tg_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"deregistration_delay":300,"lambda_multi_value_headers_enabled":false,"name":"nlbtargetgrouptest","name_prefix":null,"port":443,"protocol":"TCP","proxy_protocol_v2":false,"slow_start":0,"tags":{"Name":"test"},"target_type":"ip","vpc_id":"test-vpc"}},{"address":"module.privatelink.aws_s3_bucket.s3_bucket_privatelink","mode":"managed","type":"aws_s3_bucket","name":"s3_bucket_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"acl":"private","bucket":"test-bucket","bucket_prefix":null,"cors_rule":[],"force_destroy":true,"grant":[],"lifecycle_rule":[],"logging":[],"object_lock_configuration":[],"policy":null,"replication_configuration":[],"server_side_encryption_configuration":[{"rule":[{"apply_server_side_encryption_by_default":[{"kms_master_key_id":null,"sse_algorithm":"aws:kms"}]}]}],"tags":{"Name":"test"},"website":[]}},{"address":"module.privatelink.aws_s3_bucket_public_access_block.s3_bucket_privatelink_access","mode":"managed","type":"aws_s3_bucket_public_access_block","name":"s3_bucket_privatelink_access","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"block_public_acls":true,"block_public_policy":true,"ignore_public_acls":true,"restrict_public_buckets":true}},{"address":"module.privatelink.data.aws_iam_policy_document.iam_policy_document_privatelink_custom","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_custom","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["arn:aws:logs:*:*:*"],"sid":"LambdaLogging"},{"actions":["s3:CreateBucket","s3:Get*","s3:ListAllMyBuckets","s3:ListBucket"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"S3Get"},{"actions":["s3:PutObject"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":[],"sid":"S3Put"},{"actions":["elasticloadbalancing:Describe*"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"ALBDescribe"},{"actions":["elasticloadbalancing:DeregisterTargets","elasticloadbalancing:RegisterTargets"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":[],"sid":"ALBTargets"},{"actions":["cloudwatch:putMetricData"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"Cloudwatch"}],"version":null}},{"address":"module.privatelink.data.aws_iam_policy_document.iam_policy_document_privatelink_lambda_assumerole","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_lambda_assumerole","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"id":"3693445097","json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["sts:AssumeRole"],"condition":[],"effect":"Allow","not_actions":[],"not_principals":[],"not_resources":[],"principals":[{"identifiers":["lambda.amazonaws.com"],"type":"Service"}],"resources":[],"sid":""}],"version":"2012-10-17"}}],"address":"module.privatelink"}]}},"resource_changes":[{"address":"aws_kms_key.kms_key_secrets","mode":"managed","type":"aws_kms_key","name":"kms_key_secrets","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":30,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":{"Name":"test"}},"after_unknown":{"arn":true,"id":true,"key_id":true,"policy":true,"tags":{}}}},{"address":"aws_lambda_function.lambda_function_test","mode":"managed","type":"aws_lambda_function","name":"lambda_function_test","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"dead_letter_config":[],"description":null,"environment":[],"file_system_config":[],"filename":null,"function_name":"testlambdafunction","handler":"app/index.handler","layers":null,"memory_size":128,"publish":false,"reserved_concurrent_executions":-1,"role":"test-role","runtime":"nodejs12.x","s3_bucket":"test-bucket","s3_key":"test-key","s3_object_version":"test-version","tags":{"Name":"test"},"timeout":60,"timeouts":null,"vpc_config":[]},"after_unknown":{"arn":true,"dead_letter_config":[],"environment":[],"file_system_config":[],"id":true,"invoke_arn":true,"kms_key_arn":true,"last_modified":true,"qualified_arn":true,"source_code_hash":true,"source_code_size":true,"tags":{},"tracing_config":true,"version":true,"vpc_config":[]}}},{"address":"module.privatelink.aws_cloudwatch_event_rule.cw_nlb_alb","module_address":"module.privatelink","mode":"managed","type":"aws_cloudwatch_event_rule","name":"cw_nlb_alb","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"description":"monitor alb events","event_pattern":null,"is_enabled":true,"name":"cloudwatcheventprivatelink","name_prefix":null,"role_arn":null,"schedule_expression":"rate(1 minute)","tags":{"Name":"test"}},"after_unknown":{"arn":true,"id":true,"tags":{}}}},{"address":"module.privatelink.aws_cloudwatch_event_target.cw_target_privatelink","module_address":"module.privatelink","mode":"managed","type":"aws_cloudwatch_event_target","name":"cw_target_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"batch_target":[],"ecs_target":[],"input":null,"input_path":null,"input_transformer":[],"kinesis_target":[],"role_arn":null,"rule":"cloudwatcheventprivatelink","run_command_targets":[],"sqs_target":[]},"after_unknown":{"arn":true,"batch_target":[],"ecs_target":[],"id":true,"input_transformer":[],"kinesis_target":[],"run_command_targets":[],"sqs_target":[],"target_id":true}}},{"address":"module.privatelink.aws_iam_policy.iam_policy_privatelink_lambda","module_address":"module.privatelink","mode":"managed","type":"aws_iam_policy","name":"iam_policy_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"description":null,"name":"default-privatelink-lambda","name_prefix":null,"path":"/"},"after_unknown":{"arn":true,"id":true,"policy":true}}},{"address":"module.privatelink.aws_iam_role.iam_role_privatelink_lambda","module_address":"module.privatelink","mode":"managed","type":"aws_iam_role","name":"iam_role_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"assume_role_policy":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","description":null,"force_detach_policies":false,"max_session_duration":3600,"name":"default-privatelinklambdaexecutionrole","name_prefix":null,"path":"/","permissions_boundary":null,"tags":{"Name":"test"}},"after_unknown":{"arn":true,"create_date":true,"id":true,"tags":{},"unique_id":true}}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda","module_address":"module.privatelink","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"policy_arn":"arn:aws:iam::aws:policy/AWSLambdaExecute","role":"default-privatelinklambdaexecutionrole"},"after_unknown":{"id":true}}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_custom","module_address":"module.privatelink","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_custom","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"role":"default-privatelinklambdaexecutionrole"},"after_unknown":{"id":true,"policy_arn":true}}},{"address":"module.privatelink.aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_vpc","module_address":"module.privatelink","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_vpc","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"policy_arn":"arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole","role":"default-privatelinklambdaexecutionrole"},"after_unknown":{"id":true}}},{"address":"module.privatelink.aws_lambda_function.lambda_function_privatelink","module_address":"module.privatelink","mode":"managed","type":"aws_lambda_function","name":"lambda_function_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"dead_letter_config":[],"description":null,"environment":[{}],"file_system_config":[],"filename":null,"function_name":"privatelinklambda","handler":"populate_NLB_TG_with_ALB.lambda_handler","layers":null,"memory_size":128,"publish":false,"reserved_concurrent_executions":-1,"runtime":"python2.7","s3_bucket":"<bucket_name>","s3_key":"<bucket_key>","s3_object_version":null,"tags":{"Name":"test"},"timeout":300,"timeouts":null,"vpc_config":[]},"after_unknown":{"arn":true,"dead_letter_config":[],"environment":[{"variables":true}],"file_system_config":[],"id":true,"invoke_arn":true,"kms_key_arn":true,"last_modified":true,"qualified_arn":true,"role":true,"source_code_hash":true,"source_code_size":true,"tags":{},"tracing_config":true,"version":true,"vpc_config":[]}}},{"address":"module.privatelink.aws_lambda_permission.cw_privatelink","module_address":"module.privatelink","mode":"managed","type":"aws_lambda_permission","name":"cw_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"action":"lambda:InvokeFunction","event_source_token":null,"function_name":"privatelinklambda","principal":"events.amazonaws.com","qualifier":null,"source_account":null,"statement_id":"AllowExecutionFromCloudWatch","statement_id_prefix":null},"after_unknown":{"id":true,"source_arn":true}}},{"address":"module.privatelink.aws_lb_target_group.nlb_tg_privatelink","module_address":"module.privatelink","mode":"managed","type":"aws_lb_target_group","name":"nlb_tg_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"deregistration_delay":300,"lambda_multi_value_headers_enabled":false,"name":"nlbtargetgrouptest","name_prefix":null,"port":443,"protocol":"TCP","proxy_protocol_v2":false,"slow_start":0,"tags":{"Name":"test"},"target_type":"ip","vpc_id":"test-vpc"},"after_unknown":{"arn":true,"arn_suffix":true,"health_check":true,"id":true,"load_balancing_algorithm_type":true,"stickiness":true,"tags":{}}}},{"address":"module.privatelink.aws_s3_bucket.s3_bucket_privatelink","module_address":"module.privatelink","mode":"managed","type":"aws_s3_bucket","name":"s3_bucket_privatelink","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"acl":"private","bucket":"test-bucket","bucket_prefix":null,"cors_rule":[],"force_destroy":true,"grant":[],"lifecycle_rule":[],"logging":[],"object_lock_configuration":[],"policy":null,"replication_configuration":[],"server_side_encryption_configuration":[{"rule":[{"apply_server_side_encryption_by_default":[{"kms_master_key_id":null,"sse_algorithm":"aws:kms"}]}]}],"tags":{"Name":"test"},"website":[]},"after_unknown":{"acceleration_status":true,"arn":true,"bucket_domain_name":true,"bucket_regional_domain_name":true,"cors_rule":[],"grant":[],"hosted_zone_id":true,"id":true,"lifecycle_rule":[],"logging":[],"object_lock_configuration":[],"region":true,"replication_configuration":[],"request_payer":true,"server_side_encryption_configuration":[{"rule":[{"apply_server_side_encryption_by_default":[{}]}]}],"tags":{},"versioning":true,"website":[],"website_domain":true,"website_endpoint":true}}},{"address":"module.privatelink.aws_s3_bucket_public_access_block.s3_bucket_privatelink_access","module_address":"module.privatelink","mode":"managed","type":"aws_s3_bucket_public_access_block","name":"s3_bucket_privatelink_access","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"block_public_acls":true,"block_public_policy":true,"ignore_public_acls":true,"restrict_public_buckets":true},"after_unknown":{"bucket":true,"id":true}}},{"address":"module.privatelink.data.aws_iam_policy_document.iam_policy_document_privatelink_custom","module_address":"module.privatelink","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_custom","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["read"],"before":null,"after":{"override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["arn:aws:logs:*:*:*"],"sid":"LambdaLogging"},{"actions":["s3:CreateBucket","s3:Get*","s3:ListAllMyBuckets","s3:ListBucket"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"S3Get"},{"actions":["s3:PutObject"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":[],"sid":"S3Put"},{"actions":["elasticloadbalancing:Describe*"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"ALBDescribe"},{"actions":["elasticloadbalancing:DeregisterTargets","elasticloadbalancing:RegisterTargets"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":[],"sid":"ALBTargets"},{"actions":["cloudwatch:putMetricData"],"condition":[],"effect":null,"not_actions":null,"not_principals":[],"not_resources":null,"principals":[],"resources":["*"],"sid":"Cloudwatch"}],"version":null},"after_unknown":{"id":true,"json":true,"statement":[{"actions":[false,false,false],"condition":[],"not_principals":[],"principals":[],"resources":[false]},{"actions":[false,false,false,false],"condition":[],"not_principals":[],"principals":[],"resources":[false]},{"actions":[false],"condition":[],"not_principals":[],"principals":[],"resources":[true]},{"actions":[false],"condition":[],"not_principals":[],"principals":[],"resources":[false]},{"actions":[false,false],"condition":[],"not_principals":[],"principals":[],"resources":[true]},{"actions":[false],"condition":[],"not_principals":[],"principals":[],"resources":[false]}]}}},{"address":"module.privatelink.data.aws_iam_policy_document.iam_policy_document_privatelink_lambda_assumerole","module_address":"module.privatelink","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_lambda_assumerole","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["no-op"],"before":{"id":"3693445097","json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["sts:AssumeRole"],"condition":[],"effect":"Allow","not_actions":[],"not_principals":[],"not_resources":[],"principals":[{"identifiers":["lambda.amazonaws.com"],"type":"Service"}],"resources":[],"sid":""}],"version":"2012-10-17"},"after":{"id":"3693445097","json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["sts:AssumeRole"],"condition":[],"effect":"Allow","not_actions":[],"not_principals":[],"not_resources":[],"principals":[{"identifiers":["lambda.amazonaws.com"],"type":"Service"}],"resources":[],"sid":""}],"version":"2012-10-17"},"after_unknown":{}}}],"prior_state":{"format_version":"0.1","terraform_version":"0.13.2","values":{"root_module":{"child_modules":[{"resources":[{"address":"module.privatelink.data.aws_iam_policy_document.iam_policy_document_privatelink_lambda_assumerole","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_lambda_assumerole","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"id":"3693445097","json":"{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"\",\n      \"Effect\": \"Allow\",\n      \"Action\": \"sts:AssumeRole\",\n      \"Principal\": {\n        \"Service\": \"lambda.amazonaws.com\"\n      }\n    }\n  ]\n}","override_json":null,"policy_id":null,"source_json":null,"statement":[{"actions":["sts:AssumeRole"],"condition":[],"effect":"Allow","not_actions":[],"not_principals":[],"not_resources":[],"principals":[{"identifiers":["lambda.amazonaws.com"],"type":"Service"}],"resources":[],"sid":""}],"version":"2012-10-17"}}],"address":"module.privatelink"}]}}},"configuration":{"root_module":{"resources":[{"address":"aws_kms_key.kms_key_secrets","mode":"managed","type":"aws_kms_key","name":"kms_key_secrets","provider_config_key":"aws","expressions":{"deletion_window_in_days":{"constant_value":30},"description":{"constant_value":"test"},"enable_key_rotation":{"constant_value":true},"is_enabled":{"constant_value":true},"key_usage":{"constant_value":"ENCRYPT_DECRYPT"},"tags":{"constant_value":{"Name":"test"}}},"schema_version":0},{"address":"aws_lambda_function.lambda_function_test","mode":"managed","type":"aws_lambda_function","name":"lambda_function_test","provider_config_key":"aws","expressions":{"function_name":{"constant_value":"testlambdafunction"},"handler":{"constant_value":"app/index.handler"},"kms_key_arn":{"references":["aws_kms_key.kms_key_secrets"]},"role":{"constant_value":"test-role"},"runtime":{"constant_value":"nodejs12.x"},"s3_bucket":{"constant_value":"test-bucket"},"s3_key":{"constant_value":"test-key"},"s3_object_version":{"constant_value":"test-version"},"tags":{"constant_value":{"Name":"test"}},"timeout":{"constant_value":"60"}},"schema_version":0}],"module_calls":{"privatelink":{"source":"<module_source>","expressions":{"alb_dns_name":{"constant_value":"lbname"},"alb_listener_port":{"constant_value":"443"},"cloudwatch_event_name":{"constant_value":"cloudwatcheventprivatelink"},"cloudwatch_schedule_expression":{"references":["var.privatelink_cw_schedule"]},"cw_metric_flag":{"references":["var.privatelink_lambda_cw_metric_flag"]},"invocations_before_deregister":{"references":["var.privatelink_lambda_invocations_before_deregister"]},"lambda_code_s3_bucket":{"references":["var.privatelink_s3_code_bucket"]},"lambda_code_s3_key":{"references":["var.privatelink_s3_code_key"]},"lambda_handler":{"references":["var.privatelink_lambda_handler"]},"lambda_kms_key":{"references":["aws_kms_key.kms_key_secrets"]},"lambda_lookup_s3_bucket_force_destroy":{"references":["var.privatelink_lambda_s3_force_destroy"]},"lambda_lookup_s3_bucket_name":{"constant_value":"test-bucket"},"lambda_name":{"constant_value":"privatelinklambda"},"lambda_runtime":{"references":["var.privatelink_lambda_runtime"]},"lambda_timeout":{"references":["var.privatelink_lambda_timeout"]},"max_lookup":{"references":["var.privatelink_lambda_max_lookup"]},"name":{"references":["var.privatelink_component"]},"nlb_target_group_name":{"constant_value":"nlbtargetgrouptest"},"nlb_target_group_port":{"references":["var.privatelink_nlb_targetgroup_port"]},"privatelink_environment_tags":{"constant_value":{"Name":"test"}},"s3_kms_arn":{"references":["aws_kms_key.kms_key_secrets"]},"vpc_id":{"constant_value":"test-vpc"}},"module":{"outputs":{"privatelink_nlb_tg_arn":{"expression":{"references":["aws_lb_target_group.nlb_tg_privatelink"]},"description":"The arn of the nlb target group for private link"}},"resources":[{"address":"aws_cloudwatch_event_rule.cw_nlb_alb","mode":"managed","type":"aws_cloudwatch_event_rule","name":"cw_nlb_alb","provider_config_key":"privatelink:aws","expressions":{"description":{"constant_value":"monitor alb events"},"name":{"references":["var.cloudwatch_event_name"]},"schedule_expression":{"references":["var.cloudwatch_schedule_expression"]},"tags":{"references":["var.privatelink_environment_tags"]}},"schema_version":0},{"address":"aws_cloudwatch_event_target.cw_target_privatelink","mode":"managed","type":"aws_cloudwatch_event_target","name":"cw_target_privatelink","provider_config_key":"privatelink:aws","expressions":{"arn":{"references":["aws_lambda_function.lambda_function_privatelink"]},"rule":{"references":["aws_cloudwatch_event_rule.cw_nlb_alb"]}},"schema_version":0},{"address":"aws_iam_policy.iam_policy_privatelink_lambda","mode":"managed","type":"aws_iam_policy","name":"iam_policy_privatelink_lambda","provider_config_key":"privatelink:aws","expressions":{"name":{"references":["terraform.workspace","var.name"]},"policy":{"references":["data.aws_iam_policy_document.iam_policy_document_privatelink_custom"]}},"schema_version":0},{"address":"aws_iam_role.iam_role_privatelink_lambda","mode":"managed","type":"aws_iam_role","name":"iam_role_privatelink_lambda","provider_config_key":"privatelink:aws","expressions":{"assume_role_policy":{"references":["data.aws_iam_policy_document.iam_policy_document_privatelink_lambda_assumerole"]},"name":{"references":["terraform.workspace","var.name"]},"tags":{"references":["var.privatelink_environment_tags"]}},"schema_version":0},{"address":"aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda","provider_config_key":"privatelink:aws","expressions":{"policy_arn":{"constant_value":"arn:aws:iam::aws:policy/AWSLambdaExecute"},"role":{"references":["aws_iam_role.iam_role_privatelink_lambda"]}},"schema_version":0},{"address":"aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_custom","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_custom","provider_config_key":"privatelink:aws","expressions":{"policy_arn":{"references":["aws_iam_policy.iam_policy_privatelink_lambda"]},"role":{"references":["aws_iam_role.iam_role_privatelink_lambda"]}},"schema_version":0},{"address":"aws_iam_role_policy_attachment.iam_role_policy_attachment_privatelink_lambda_vpc","mode":"managed","type":"aws_iam_role_policy_attachment","name":"iam_role_policy_attachment_privatelink_lambda_vpc","provider_config_key":"privatelink:aws","expressions":{"policy_arn":{"constant_value":"arn:aws:iam::aws:policy/service-role/AWSLambdaVPCAccessExecutionRole"},"role":{"references":["aws_iam_role.iam_role_privatelink_lambda"]}},"schema_version":0},{"address":"aws_lambda_function.lambda_function_privatelink","mode":"managed","type":"aws_lambda_function","name":"lambda_function_privatelink","provider_config_key":"privatelink:aws","expressions":{"environment":[{"variables":{"references":["var.alb_dns_name","aws_lb_target_group.nlb_tg_privatelink","aws_s3_bucket.s3_bucket_privatelink","var.max_lookup","var.invocations_before_deregister","var.cw_metric_flag","var.alb_listener_port"]}}],"function_name":{"references":["var.lambda_name"]},"handler":{"references":["var.lambda_handler"]},"kms_key_arn":{"references":["var.lambda_kms_key"]},"role":{"references":["aws_iam_role.iam_role_privatelink_lambda"]},"runtime":{"references":["var.lambda_runtime"]},"s3_bucket":{"references":["var.lambda_code_s3_bucket"]},"s3_key":{"references":["var.lambda_code_s3_key"]},"tags":{"references":["var.privatelink_environment_tags"]},"timeout":{"references":["var.lambda_timeout"]}},"schema_version":0},{"address":"aws_lambda_permission.cw_privatelink","mode":"managed","type":"aws_lambda_permission","name":"cw_privatelink","provider_config_key":"privatelink:aws","expressions":{"action":{"constant_value":"lambda:InvokeFunction"},"function_name":{"references":["aws_lambda_function.lambda_function_privatelink"]},"principal":{"constant_value":"events.amazonaws.com"},"source_arn":{"references":["aws_cloudwatch_event_rule.cw_nlb_alb"]},"statement_id":{"constant_value":"AllowExecutionFromCloudWatch"}},"schema_version":0},{"address":"aws_lb_target_group.nlb_tg_privatelink","mode":"managed","type":"aws_lb_target_group","name":"nlb_tg_privatelink","provider_config_key":"privatelink:aws","expressions":{"name":{"references":["var.nlb_target_group_name"]},"port":{"references":["var.nlb_target_group_port"]},"protocol":{"constant_value":"TCP"},"tags":{"references":["var.privatelink_environment_tags"]},"target_type":{"constant_value":"ip"},"vpc_id":{"references":["var.vpc_id"]}},"schema_version":0},{"address":"aws_s3_bucket.s3_bucket_privatelink","mode":"managed","type":"aws_s3_bucket","name":"s3_bucket_privatelink","provider_config_key":"privatelink:aws","expressions":{"acl":{"constant_value":"private"},"bucket":{"references":["var.lambda_lookup_s3_bucket_name"]},"force_destroy":{"references":["var.lambda_lookup_s3_bucket_force_destroy"]},"server_side_encryption_configuration":[{"rule":[{"apply_server_side_encryption_by_default":[{"sse_algorithm":{"constant_value":"aws:kms"}}]}]}],"tags":{"references":["var.privatelink_environment_tags"]}},"schema_version":0},{"address":"aws_s3_bucket_public_access_block.s3_bucket_privatelink_access","mode":"managed","type":"aws_s3_bucket_public_access_block","name":"s3_bucket_privatelink_access","provider_config_key":"privatelink:aws","expressions":{"block_public_acls":{"constant_value":true},"block_public_policy":{"constant_value":true},"bucket":{"references":["aws_s3_bucket.s3_bucket_privatelink"]},"ignore_public_acls":{"constant_value":true},"restrict_public_buckets":{"constant_value":true}},"schema_version":0},{"address":"data.aws_iam_policy_document.iam_policy_document_privatelink_custom","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_custom","provider_config_key":"privatelink:aws","expressions":{"statement":[{"actions":{"constant_value":["logs:CreateLogGroup","logs:CreateLogStream","logs:PutLogEvents"]},"resources":{"constant_value":["arn:aws:logs:*:*:*"]},"sid":{"constant_value":"LambdaLogging"}},{"actions":{"constant_value":["s3:Get*","s3:CreateBucket","s3:ListBucket","s3:ListAllMyBuckets"]},"resources":{"constant_value":["*"]},"sid":{"constant_value":"S3Get"}},{"actions":{"constant_value":["s3:PutObject"]},"resources":{"references":["aws_s3_bucket.s3_bucket_privatelink"]},"sid":{"constant_value":"S3Put"}},{"actions":{"constant_value":["elasticloadbalancing:Describe*"]},"resources":{"constant_value":["*"]},"sid":{"constant_value":"ALBDescribe"}},{"actions":{"constant_value":["elasticloadbalancing:RegisterTargets","elasticloadbalancing:DeregisterTargets"]},"resources":{"references":["aws_lb_target_group.nlb_tg_privatelink"]},"sid":{"constant_value":"ALBTargets"}},{"actions":{"constant_value":["cloudwatch:putMetricData"]},"resources":{"constant_value":["*"]},"sid":{"constant_value":"Cloudwatch"}}]},"schema_version":0},{"address":"data.aws_iam_policy_document.iam_policy_document_privatelink_lambda_assumerole","mode":"data","type":"aws_iam_policy_document","name":"iam_policy_document_privatelink_lambda_assumerole","provider_config_key":"privatelink:aws","expressions":{"statement":[{"actions":{"constant_value":["sts:AssumeRole"]},"principals":[{"identifiers":{"constant_value":["lambda.amazonaws.com"]},"type":{"constant_value":"Service"}}]}]},"schema_version":0}],"variables":{"alb_dns_name":{"description":"name of the alb for the nlb to forward to"},"alb_listener_port":{"description":"the port for the alb"},"cloudwatch_event_name":{"description":"name to give to the cloudwatch event used to trigger the lambda"},"cloudwatch_schedule_expression":{"description":"the schedule expression for the cloudweatch event e.g. rate(1 minute)"},"cw_metric_flag":{"description":"cloudwatch metric flag for the lambda"},"invocations_before_deregister":{"description":"the number of invocations before a target group is deregistered by the lambda"},"lambda_code_s3_bucket":{"description":"the s3 bucket containing the lambda code zip"},"lambda_code_s3_key":{"description":"the key of the lambda zip object in s3"},"lambda_handler":{"description":"the handler for the lambda"},"lambda_kms_key":{"description":"the kms key to use to encrypt the lambda environment variables"},"lambda_lookup_s3_bucket_force_destroy":{"description":"force destroy the s3 bucket used by the lambda for dns lookup"},"lambda_lookup_s3_bucket_name":{"description":"the name of the s3 bucket to use to store dns lookup IPs for use by the lmabda"},"lambda_name":{"description":"name to give to the lambda function"},"lambda_runtime":{"description":"the runtime of the lambda"},"lambda_timeout":{"description":"the timepout period for the lambda in seconds"},"max_lookup":{"description":"the maximum number of ips for the lambda to look up"},"name":{"description":"the name to give to the privatelink component"},"nlb_target_group_name":{"description":"the name to give to the nlb target group"},"nlb_target_group_port":{"description":"port for the nlb target grop"},"privatelink_environment_tags":{"description":"map of tags to assign to resources in the module"},"s3_kms_arn":{"description":"kms key arn to secure the s3 bucket storing the lambda ref data"},"vpc_id":{"description":"vpc id to deploy into"}}}}},"variables":{"privatelink_component":{"description":"name of the privatelink component"},"privatelink_component_short_name":{"description":"short ame for the privatelink component"},"privatelink_cw_schedule":{"description":"schedule expression for the cloudwatch event"},"privatelink_lambda_cw_metric_flag":{"description":"flag in the lambda for the cloudwatch metric"},"privatelink_lambda_handler":{"description":"handler for the lambda"},"privatelink_lambda_invocations_before_deregister":{"description":"invocations before deregistering target"},"privatelink_lambda_max_lookup":{"description":"max number of IPs to look up by the lambda"},"privatelink_lambda_runtime":{"description":"lambda runtime"},"privatelink_lambda_s3_force_destroy":{"description":"do we force destrot the lambda or not"},"privatelink_lambda_timeout":{"description":"timeout for the lambda"},"privatelink_nlb_targetgroup_port":{"description":"nlb target group port"},"privatelink_s3_code_bucket":{"description":"s3 bucket id where the lambda code is stored"},"privatelink_s3_code_key":{"description":"s3 object key for the lambda code"}}}}}

terraform-compliance -f tests/ -p test.tfplan.json
Tested with both docker and on mac - outcome the same
Error output

Scenario: Lambda functions should always have encryption enabled
        Given I have aws_lambda_function defined
		Failure: module.privatelink.aws_lambda_function.lambda_function_privatelink (aws_lambda_function) does not have kms_key_arn property.
        Then it must contain kms_key_arn
          Failure:

1 features (0 passed, 1 failed)
1 scenarios (0 passed, 1 failed)
2 steps (1 passed, 1 failed)

Simple Lamdba test for kms_key_arn

  Scenario: Lambda functions should always have encryption enabled
    Given I have aws_lambda_function defined
    Then it must contain kms_key_arn

Expected behavior :

Tested versions :

terraform compliance v1.3.4
terraform v0.13.2

Additional context
Add any other context about the problem here.

Hi - did you get a chance to review this one? It is causing me a bit of a headache in our CI/CD pipeline throwing this error...

Any updates on this one at all?

I have a similar issue here. When it assesses the child module inside the child module it fails. When it assess the resource, it passes the tests.

I have a similar issue here. When it assesses the child module inside the child module it fails. When it assess the resource, it passes the tests.

Hi - this is causing me further issues (tested at 1.3.15 and still present). I could really do with your input on this as it's reducing the effectiveness of this tool in our pipelines as I have to allow_failure or tag nofail on several tests which isn't ideal.. Latest failure demonstrated with a very simple sns_topic:
Create with in line resource block and the test passes:
resource "aws_sns_topic" "test" {
  kms_master_key_id = aws_kms_key.test.id
}

resource "aws_kms_key" "test" {
  description         = "test"
  enable_key_rotation = true
}

However, move the sns_topic creation into a module (as in our implementation) and it fails:
module sns_topic_module {
  source = "./sns_module"
  key_id = aws_kms_key.test.id
}

resource "aws_kms_key" "test" {
  description         = "test"
  enable_key_rotation = true
}

--

./sns_module:
main.tf:
resource "aws_sns_topic" "test" {
  kms_master_key_id = var.key_id
}

inputs.tf:
variable key_id {
  type        = string
  description = "Amazon Resource Name (ARN) of the AWS Key Management Service (KMS) key used for SNS messaging encryption."
}

test failure:
    Scenario: SNS topics must be encrypted with kms
        Given I have aws_sns_topic defined
		Failure: module.sns_topic_module.aws_sns_topic.test (aws_sns_topic) does not have kms_master_key_id property.
        Then it must contain kms_master_key_id
          Failure:
        And its value must not be null

inline-plan:
{"format_version":"0.1","terraform_version":"0.13.4","planned_values":{"root_module":{"resources":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":null,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":null}},{"address":"aws_sns_topic.test","mode":"managed","type":"aws_sns_topic","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"application_failure_feedback_role_arn":null,"application_success_feedback_role_arn":null,"application_success_feedback_sample_rate":null,"content_based_deduplication":false,"delivery_policy":null,"display_name":null,"fifo_topic":false,"http_failure_feedback_role_arn":null,"http_success_feedback_role_arn":null,"http_success_feedback_sample_rate":null,"lambda_failure_feedback_role_arn":null,"lambda_success_feedback_role_arn":null,"lambda_success_feedback_sample_rate":null,"sqs_failure_feedback_role_arn":null,"sqs_success_feedback_role_arn":null,"sqs_success_feedback_sample_rate":null,"tags":null}}]}},"resource_changes":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":null,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":null},"after_unknown":{"arn":true,"id":true,"key_id":true,"policy":true,"tags_all":true}}},{"address":"aws_sns_topic.test","mode":"managed","type":"aws_sns_topic","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"application_failure_feedback_role_arn":null,"application_success_feedback_role_arn":null,"application_success_feedback_sample_rate":null,"content_based_deduplication":false,"delivery_policy":null,"display_name":null,"fifo_topic":false,"http_failure_feedback_role_arn":null,"http_success_feedback_role_arn":null,"http_success_feedback_sample_rate":null,"lambda_failure_feedback_role_arn":null,"lambda_success_feedback_role_arn":null,"lambda_success_feedback_sample_rate":null,"sqs_failure_feedback_role_arn":null,"sqs_success_feedback_role_arn":null,"sqs_success_feedback_sample_rate":null,"tags":null},"after_unknown":{"arn":true,"id":true,"kms_master_key_id":true,"name":true,"name_prefix":true,"policy":true,"tags_all":true}}}],"configuration":{"root_module":{"resources":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_config_key":"aws","expressions":{"description":{"constant_value":"test"},"enable_key_rotation":{"constant_value":true}},"schema_version":0},{"address":"aws_sns_topic.test","mode":"managed","type":"aws_sns_topic","name":"test","provider_config_key":"aws","expressions":{"kms_master_key_id":{"references":["aws_kms_key.test"]}},"schema_version":0}]}}}

module-plan:
{"format_version":"0.1","terraform_version":"0.13.4","planned_values":{"root_module":{"resources":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":null,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":null}}],"child_modules":[{"resources":[{"address":"module.sns_topic_module.aws_sns_topic.test","mode":"managed","type":"aws_sns_topic","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","schema_version":0,"values":{"application_failure_feedback_role_arn":null,"application_success_feedback_role_arn":null,"application_success_feedback_sample_rate":null,"content_based_deduplication":false,"delivery_policy":null,"display_name":null,"fifo_topic":false,"http_failure_feedback_role_arn":null,"http_success_feedback_role_arn":null,"http_success_feedback_sample_rate":null,"lambda_failure_feedback_role_arn":null,"lambda_success_feedback_role_arn":null,"lambda_success_feedback_sample_rate":null,"sqs_failure_feedback_role_arn":null,"sqs_success_feedback_role_arn":null,"sqs_success_feedback_sample_rate":null,"tags":null}}],"address":"module.sns_topic_module"}]}},"resource_changes":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"customer_master_key_spec":"SYMMETRIC_DEFAULT","deletion_window_in_days":null,"description":"test","enable_key_rotation":true,"is_enabled":true,"key_usage":"ENCRYPT_DECRYPT","tags":null},"after_unknown":{"arn":true,"id":true,"key_id":true,"policy":true,"tags_all":true}}},{"address":"module.sns_topic_module.aws_sns_topic.test","module_address":"module.sns_topic_module","mode":"managed","type":"aws_sns_topic","name":"test","provider_name":"registry.terraform.io/hashicorp/aws","change":{"actions":["create"],"before":null,"after":{"application_failure_feedback_role_arn":null,"application_success_feedback_role_arn":null,"application_success_feedback_sample_rate":null,"content_based_deduplication":false,"delivery_policy":null,"display_name":null,"fifo_topic":false,"http_failure_feedback_role_arn":null,"http_success_feedback_role_arn":null,"http_success_feedback_sample_rate":null,"lambda_failure_feedback_role_arn":null,"lambda_success_feedback_role_arn":null,"lambda_success_feedback_sample_rate":null,"sqs_failure_feedback_role_arn":null,"sqs_success_feedback_role_arn":null,"sqs_success_feedback_sample_rate":null,"tags":null},"after_unknown":{"arn":true,"id":true,"kms_master_key_id":true,"name":true,"name_prefix":true,"policy":true,"tags_all":true}}}],"configuration":{"root_module":{"resources":[{"address":"aws_kms_key.test","mode":"managed","type":"aws_kms_key","name":"test","provider_config_key":"aws","expressions":{"description":{"constant_value":"test"},"enable_key_rotation":{"constant_value":true}},"schema_version":0}],"module_calls":{"sns_topic_module":{"source":"./sns_module","expressions":{"key_id":{"references":["aws_kms_key.test"]}},"module":{"resources":[{"address":"aws_sns_topic.test","mode":"managed","type":"aws_sns_topic","name":"test","provider_config_key":"sns_topic_module:aws","expressions":{"kms_master_key_id":{"references":["var.key_id"]}},"schema_version":0}],"variables":{"key_id":{"description":"Amazon Resource Name (ARN) of the AWS Key Management Service (KMS) key used for SNS messaging encryption."}}}}}}}}

Test:
  Scenario: SNS topics must be encrypted with kms
    Given I have aws_sns_topic defined
    Then it must contain kms_master_key_id
    And its value must not be null

Hi @eerkunt - Have you managed to review this one - I keep seeing further resources hit this problem and would be keen to get your views..

Had a look and created a local test for reproducing this problem. The problem is not referencing resources within module (or a module of a child module), that works.
The problem here I found is, when you pass the kms_key_id as a variable to a module, then it loses the referencing for the resource mounting/referencing, since it become multiple hops to resolve where is that variable is used etc.
Getting a bit deeper on this.

Sounds like we have a solution for this issue. Can you please try with 1.3.26 please ?

Great work - thanks for responding. My initial local test case I have for this is indeed resolved by 1.3.26 - let me do some more testing in our pipelines to be certain this resolves each of our current known resources hitting this issue. Will report back in a few hours 👍

All good from my end - thanks again for resolving this one - much appreciated

Great to know its working 🎉  Thanks for the issue 🙏


Remove "outdated" headers from CLI and Orchestration docs

Migrated from GitLab: https://gitlab.com/meltano/meltano/-/issues/2218
Originally created by @DouweM on 2020-08-05 23:24:43

View 1 previous comment from the original issue on GitLab


play multiple videos?

Can this plugin play multiple videos or a playlist of videos or is it limited to a single video?

No. Limited.

Would you consider enhancing your plugin to enable the playback of an array of videos?

+1

I've made a quick test like this and it's working:
playlist = ['video1', 'video2', 'video3'];

function playlistVideo () {
    $('#elem').vide({
        mp4: 'video/' + playlist[0] + '.mp4',
        webm: 'video/' + playlist[0] + '.webm',
        ogv: 'video/' + playlist[0] + '.ogv',
        poster: 'video/' + playlist[0] + '.jpg'
    }, {
        autoplay: true,
        loop: false
    });

    player1 = $('#elem').data('vide').getVideoObject();

    player1.onended = function () {
        playlist.shift();
        if (playlist.length) {
            playlistVideo();
        }
    }
}

I've made a quick test like this and it's working:
playlist = ['video1', 'video2', 'video3'];

function playlistVideo () {
    $('#elem').vide({
        mp4: 'video/' + playlist[0] + '.mp4',
        webm: 'video/' + playlist[0] + '.webm',
        ogv: 'video/' + playlist[0] + '.ogv',
        poster: 'video/' + playlist[0] + '.jpg'
    }, {
        autoplay: true,
        loop: false
    });

    player1 = $('#elem').data('vide').getVideoObject();

    player1.onended = function () {
        playlist.shift();
        if (playlist.length) {
            playlistVideo();
        }
    }
}

Can you explain a bit more on how to do it? What to change on the index?


'filters' parameter is deprecated

Using v1.2-debian-cloudwatch (although I guess this might affect all v1.2 images) I get this log row three times:
2018-07-04 06:30:16 +0000 [warn]: 'filters' parameter is deprecated: filters has been renamed as matches
I did a quick test to downgrade to v1.1 and I didn't get this error, and to my understanding v1.2 has a later version of Ruby than v1.1. Therefor I suspect this is an issue of a new Ruby version. But as I've never touched Ruby and I lack time so I haven't been able to put some work into this to test my theory, or find a fix.

Hi there. I'm seeing the warning too. What's the status of this ticket? Thanks.


Rssbus

Hi Alan. Just updated the name of the file. Let me know if you need anything else. Thanks!

Great, I'll merge the change once Github receives the commit. Thanks!

@rssbus Github does not appear to have registered the file name update. Has the change been pushed?

Hi Alan. We just issued a pull request. Let me know if you do not receive it. Thanks

Closing this PR in favor of #158


Assign multiple keybindings to same action

Hey! First off: I really love ahoviewer, it comes very close to the comfiness I was used to when using Honeyview, except that ahoviewer even additionally supports *.webm files -- which is just awesome.
In Honeyview it was possible to assign multiple keybindings to the same action, for example I could assign the "next image" action to the space key, D and the left arrow key. Is this something you would consider adding?

Is this something you would consider adding?

I will look into whether this can be implemented.

Thank you for the quick reply and your time!


New Reactive API

New Reactive API which is backwards compatible but introduces public, private, readonly and jsfunctions modes for model fields.
I create this PR to discuss the potential changes.
Current state:

Fields ending with __ are excluded from the frontend, fields ending with_ are readonly.
Private{T} is introduced as wrapper type for fields that don't go into the frontend, but I'm not sure whether this is the optimal solution
Reactive{T} becomes a mutable struct with a mode field. :public is default and is identical to the current implementation, :private is excluded from the frontend. :readonly does not receive a watcher in the frontend. (Currently it can manually be changed from the frontend, but we should prevent that in the future). :jsfunction indicates that the variable contains either a JSONText with a js function or a Dict that possibly contains a js function. This variables are (currently) readonly.

Some background to js functions:

Why should we have it?
Sometimes it is very convenient to execute js functions in the frontend, e.g. for messenging, debugging or complex animations. Secondly, Apexcharts uses functions for axis formatting. (It is at least the only way I found to change the number of decimals in axis labels.)
What is special about functions?
If js functions are initialised in the data section, they need to be defined with some JSONText, which is straight forward. But the dynamic change of a js function is tricky, as JSON does not provide a standard format. I have defined my own format after various inspiring readings and use the revive option in the json parser to construct functions in the frontend. This is invisible to the user and happens either in the push!(model, ...)routine or in the reactive listener that is attached during model setup.

Tasks to be done:

[x] update! needs to differentiate whether a property is private or not (see setindex! ...)
[x] readonly properties can currently be changed manually
[ ] a switch enableing/disabling js function reviver
[ ] support a selection of keys, e.g. a dictionary of regex patterns, for which the reviver is enabled
[ ] make the js_function type writable from the frontend

Proposal for other changes:

[ ] use setindex! to change array parameters with notification and define a special method to replace the current setindex method
[ ] modify the listener to better handle typed arrays

I fixed the critical parts and changed the API for readonly and private.
 That looks much nicer. I did this, because I couldn't find a wrapper type that was flexible enough. I still have the Private{T} type defined. @essenciary If you know a better way to implement it, please tell me. Otherwise I would propose to remove Private before role-out.
Moreover I fixed a bug in update!() that prevents updates from the frontend for non-reactive types. We need to fix that in master, if we don't want to role out the new API.
But I think, it's ready.

Thank you!
The field naming convention approach has a few notable downsides - listing them together with possible ways to mitigate the issues:

if people are not aware of this and use this naming for their fields, they will end up with rage inducing bugs. This can be addressed with a one time warning that _ and __ are used for read-only and private properties if such fields are detected.
it can clash with other naming constraints (people might need these endings for other things, like to match the name of a DB column). This can be addressed by having _ and __ in config. On a separate note, as a general best practice, we should not hard code such "magic strings" (https://softwareengineering.stackexchange.com/questions/365339/what-is-wrong-with-magic-strings).
from a stylistic perspective, if one needs to work with these fields a lot, it's unpleasant to be forced to use the __ ending in all their code (people can set an alias for the field).
do we need private fields at all? Do they need to be in the ReactiveModel if they are private?

That being said, I'm of the opinion that a good working solution now is better than a perfect solution in one year. So I'm happy to merge it, but ideally we should put the magic strings (_ and __) into vars so they can be read and written.
We can remove the Private API if it doesn't work - otherwise it will just confuse users looking into the code.

Thanks fir the comments. That sounds all reasonable and feasable. I'll let you know when I'm finished

@essenciary

I continued thinking about the API and I think we could make the Private{T} type working, if we agreed that these variables always have to be used like the reactive types, i.e. by using [].
Alternatively we could just enhance the reactive type by another property autoupdate which decides whether a variable get's a listener during setup. Then we could easily offer two APIs, the reactive one and the basic one with pattern matching.

Why a private field? It is certainly convenient to store some properties with the model. My first candidate would be the channel which is stored with the model. That would also make the messenging much cleaner if we wouldn't have to store channel properties in the Genie.Settings if we think about including two models on a page. It would also allow us to define the push method without a channel, just push!(model, field => value)

I revised the API, but I'm wondering, whether we should encode the mode properties similar as the no_watcher properties and not with a symbol. What do you think?
Anyhow, please test and comment.

I don't ask for support in implementing, just for your advice in style 😉

Proposal for other changes:

[ ]  use setindex! to change array parameters with notification and define a special method to replace the current setindex method
[ ]  modify the listener to better handle typed arrays

Do you have any opinion about this topic? I would rename the current  setindex!(r::Reactive{T}) to set_withoutlistener!() and define
function setindex!(r::Reactive{T}, v::Any, index1, indices...)`
  r[][index, indices...] = v
  notify(r)
end

That way it would be quite easy to change single array elements. For the change of more than one element one would have to call notify manually.

I added support for OffsetArrays. This is very handy, if you use bind array values to your elements, because you can chose 0-based indexing and have the same indexing in both front-end and backend.
Furthermore, I convert a single value to an array, if the field is an array type. This is convenient for some js elements that can either hold amn atomic value or an array, e.g. multi-sliders.
@essenciary Did you get on with your testing?

There were some errors in the Reactive type setup so that it was not possible to use parametric types in the model. I got some inspiration by Obervables.jl

BTW, I also added support of typed arrays.

@hhaensel Thank you, looks great!
The only think I'm not sure about is if it is worth having OffsetArrays as a dependency of core Stipple. Is it that widely used? (I never used it). Would it require that the users are aware of the existence of OffsetArrays and use the OffsetArrays API or is it transparent to the users? Can't it be a separate StippleOffsetArrays package that specializes some convert function?

@hhaensel I've merged a series of changes into master
https://github.com/GenieFramework/Stipple.jl/commit/cd73554ba56387fba7feefd0f278d746aeadb9f1
Mostly doc comments thus completing the comments for Stipple core.
Currently working on UI tests and building API docs in Stipple core.
The only potentially breaking change is that I moved @click into StippleUI since it's Quasar functionality which is only in StippleUI. However, I set @click to be exported in StippleUI so assuming the code that used @click also used StippleUI it should be non-breaking.

The only thing I'm not sure about is if it is worth having OffsetArrays as a dependency of core Stipple. Is it that widely used? (I never used it). Would it require that the users are aware of the existence of OffsetArrays and use the OffsetArrays API or is it transparent to the users? Can't it be a separate StippleOffsetArrays package that specializes some convert function?

The user doesn't need to be aware of the package. Users that want to use OffsetArrays, can do it. If you think that we should not include the package, we can include parts of the package only, if the user loads OffsetArrays.

We should be very strict about what dependencies we add in Stipple core as these are used by all the Stipple libraries potentially leading to longer precompilation times, versioning issues, etc. Stipple core provides the low-level communication architecture between Julia and JS/Vue.
I think we should move this kind of logic in specialized packages or user code. We could define a convertfield(oldvalue, newvalue) function which is invoked from update! and can be specialized to support any kind of types.

Cool approach, I will manage that. I thought about doing this with update! itself. I might find a solution this weekend

@essenciary Coming back to an old issue: could you give me an Example where you need the parse() function?

We use parse to convert generic data types into the specific ones used by the various Stipple types (each package which defines the types adds parse functions). There's quite a few:

I reconfigured the value parsing and introduced convertvalue() in contrast to Base.convert(), because I need to read the value of the target variable and not the type only. Currently I have not yet separated OffsetArrays for easier testing. If you think the setup is ok, I will continue.
What do you think about the idea to use the package Requires.jl to support packages that are not part of the dependencies? In that case we would not need to file another package for 10 lines of code.
One last question. Why do you use Base.parse() for the type conversion. Wouldn't it be better to introduce a Stipple-owned parsing routine, e.g. Stipple.parsetype() in order to avoid type pirating?

Cool progress, thank you for the updates!
Yes, let's give Requires a try and see how it goes. If good, we can extend it's usage for other cases. If not, we can refactor later.
It wouldn't be type piracy as Base.parse in this case is designed to be specialized for new types provided by the Stipple packages. And this is the exact use case for Base.parse. If a Base.parse method is already defined for that type it will just be used, no need to pirate/specialize anymore. It's about tapping into existing APIs/conventions.

@hhaensel I think we should try to merge this, it's becoming very complex as it covers too many different topics. We can move some of the threads into separate issues so we can work on more granular changes. This PR will introduce so many changes that if anything breaks, it will be hard to trace the issues and fix them.

I agree, I'll try to get it done tonight!

I agree, I'll try to get it done tonight!

Thank you. No rush, but best not to add new features here please.

@essenciary looks as if we are set for larger testing.
Yesterday night I added support of indexing into Reactive fields with notification and I added Requires.jl and changed OffsetArray support accordingly.
A very rough testing of the API can now be found in the StippleDemos. New API3 Demo Draft.jl
Would be great to have a feedback!

@hhaensel are you on any messaging platform (Gitter [Genie's], Slack [Julia's], Discord [Gennie's], WhatsApp, etc) so we can maybe follow up more real time on quick things?

@hhaensel also, what branch should I test?

My plan is to test using the current #master of Stipple, StippleUI, and StippleCharts and tag new versions - so we have a final version for the current API.
Then test with the new API and once all is good we tag a new version.
Anything wrong with this approach?

Ok for me. Feel free to merge!

@hhaensel also, what branch should I test?

Well, the one that this PR is about, so hh-newReactive


[mongodb cdc]Add parameter to control whether to add ChangelogNormalize operator

Search before asking

[X] I searched in the issues and found nothing similar.

Motivation
The ChangelogNormalize operator can generate "before update" events, but "before update" is not required in some simple CDC scenarios (for example: synchronizing mongodb data to a database that supports upsert). But if you add the ChangelogNormalize operator, a huge state will be generated, which is completely unnecessary in those simple scenarios. So can we add a parameter to control whether to add the ChangelogNormalize operator?

Solution
Add a parameter to control whether to add the ChangelogNormalize operator.
Alternatives
No response
Anything else?
No response
Are you willing to submit a PR?

[ ] I'm willing to submit a PR!

Currently, MongoDB CDC registered itself to produce I/U+/D row data. Flink will check each source's produced row type, and determine whether source isUpsertMode. If so, ChangelogNormalize node will be inserted automatically.
If I see it correctly, "Normalize upsert source" rule is enforced directly by Flink, and seems CDC-side doesn't have a simple way to circumvent it.

@yuxiqian Thank you for your reply. If we can add an additional parameter (for example: force-changelog-mode-all) to this code to judge whether our source is of the type of ChangelogMode.all(), we can control whether the ChangelogNormalize node is generated. Full changelog is a very good feature, but it requires the mongo version, which is not easy to implement in a production environment.

Yes, fixing getChangelogMode function should work. But my concern is that would cause inconsistent semantic, if MongoDB CDC declares itself as full changelog source while emitting upsert data only.
What do @leonardBang @Jiabao-Sun think?

Closed by #2229


feat: fallback to epoll_create when epoll_create1 not implement

Fallback to epoll_create when epoll_create1 not implement.

@honsunrise why do you need this change?

because some linux kernel not implement epoll_create1.
so tokio will panic when i run tokio on the system.

because some linux kernel not implement epoll_create1. so tokio will panic when i run tokio on the system.

What Linux version are you using? Because epoll_create1 was added in v2.6.27, after https://github.com/rust-lang/rust/pull/95026 Rust will only support 3.2+.

v2.6.18
I did not use *-gnu toolchains, compile with the musl toolchains, it works on v2.6.18.
However, this PR is incomplete and the eventfd also needs to fallback.

Kernel v2.6.18 is not supported. The minimum we supported was RHEL 6, kernel 2.6.32-754, but that is no longer maintained by RedHat. So, I think we'll want to increase our minimum support kernel to 3.2 based on https://github.com/tokio-rs/mio/issues/1561 and https://github.com/rust-lang/rust/pull/95026.


Correction for raw affiliation Centre d'Histoire du XIXe Siècle, Sorbonne Université, Paris, France

Correction needed for raw affiliation Centre d'Histoire du XIXe Siècle, Sorbonne Université, Paris, France
raw_affiliation_name: Centre d'Histoire du XIXe Siècle, Sorbonne Université, Paris, France
new_rors: 04zjb4t38;02en5vm52;04hrxxd90
previous_rors: 04zjb4t38;02en5vm52
works_examples: W4313048298;W4389819368
contact: eff8be61a754f0f2ac3a907189defd28:ae3e8da8c7458e2804823c7f9c @ sorbonne-universite.fr

This issue was accepted and ingested by the OpenAlex team on 2024-11-01. The new affiliations should be visible within the next 7 days.


Documentation: Document how to call Scorecard as a library.

[ ] Enhance the go pkg documentation (ex<EMAIL_ADDRESS>with description of how to run Scorecard with examples
[ ] Add a section to the main README under Using Scorecard with a brief blurb about running as a library and linking to the go docs.
[ ] (Possible / Later) Add a doc under the docs/ directory with a longer description of running Scorecard as a library

TBD: As we add more docs to scorecard.dev, where will this show up?
Source info:
One example here: https://github.com/ossf/scorecard/issues/4254#issuecomment-2250953095
Design issue for new entrypoint: https://github.com/ossf/scorecard/issues/3717

I'm starting work on the first item.


fix: Update Java-Vision IT test cases

This is a copy of https://github.com/googleapis/java-vision/pull/976 in the Java Vision repo.

Java-Notebook IT failures:
java.util.concurrent.ExecutionException: com.google.api.gax.rpc.PermissionDeniedException: Operation with name "projects/gcloud-devel/locations/us-central1-a/operations/operation-1661889346833-5e77ac42c8c75-953bdec3-bcbe0f14" failed with status = GrpcStatusCode{transportCode=PERMISSION_DENIED} and message = Quota 'CPUS' exceeded.  Limit: 100.0 in region us-central1.

and
java.util.concurrent.ExecutionException: com.google.api.gax.rpc.InvalidArgumentException: Operation with name "projects/gcloud-devel/locations/us-central1-a/operations/operation-1661889357475-5e77ac4ceef63-563cbd53-c6aa22c6" failed with status = GrpcStatusCode{transportCode=INVALID_ARGUMENT} and message = The resource 'projects/gcloud-devel/zones/us-central1-a/instances/test-notebook-instance-id-f407591a' is not ready

For Java-Container, the message suggests to retry after wait.

:tada:

@suztomo Integration Tests can pass occasionally. I think we'll need to take a deeper look at some of the more flaky tests cases. Going to merge this code for vision in.


expose annotations to linter

these are structured similarly to the 'templating' field, but in general do not reliably have a 'type' field exposed.
use-case for this is catching when datasources are defined in annotations but they're not derived from dashboard inputs.

maybe I am misunderstanding, but this is about defining annotations w/in the dashboard. Annotations can be defined by querying a datasource. for example, we had some dashboards at $JOB that had this in the top-level JSON schema:
"annotations": {
    "list": [
      {
        "datasource": {
          "type": "prometheus",
          "uid": "0c52be2e-c5dd-48b3-b134-99d970fd5bc3"
        },
        "enable": true,
        "expr": "changes(kube_deployment_status_replicas{k8s_namespace_name=\"$kube_namespace\", deployment_environment=\"$env\", deployment_stack=\"$stack\"}[$__interval]) > 0",
        "iconColor": "red",
        "name": "Deployment annotations",
        "titleFormat": "Deployment"
      },
      {
        "builtIn": 1,
        "datasource": {
          "type": "grafana",
          "uid": "-- Grafana --"
        },
        "enable": true,
        "hide": true,
        "iconColor": "rgba(0, 211, 255, 1)",
        "name": "Annotations & Alerts",
        "type": "dashboard"
      }
    ]
  },

because the linter was not looking at .annotations on the model, it didn't detect the fact that this datasource wasn't templated. and yes, the intent is to be able to use the templated datasource rule in more places :) - there are a lot of places where datasources can be configured, i am finding :p

Ohh ohh right.. I'm picking up what you're putting down now. I conflated this with the __inputs value that you can use to replace a hard-coded data source when importing a dashboard. Totally different thing, but my brain combined them.
So for this, we'd want to make sure that the data source used by the annotation is the templated data source.
That warrants another rule, as it wouldn't make sense in panel-template-rule, since it isn't really a panel. Maybe a dashboard rule.. 🤔 I'll have to give that some thought.
Can I ask you to create an issue to go along with this, to ultimately implement a rule that takes advantage of the visibility of the annotations? I can get this merged at that point.

sure! i filed https://github.com/grafana/dashboard-linter/issues/197
fwiw we are using this project as part of a custom lint script and I wrote a new rule datasource-from-inputs-rule that will detect and automatically fix any instances where datasources are not templated.


DSP does not Generate the CSV file. Also Receiving Error when Clicking the Hud Button.

DSP is not generating the csv file when I load a save or pause the game.
I also receive an error when I click the HUD button. Error is in the included attachment

.

Thank you for the report @zkreeg
Anyone else finding this ticket should feel free to comment here to show support for updating this issue. Right now it’s just not getting priority in my life.
Anyone wanting to fix the issue is free to create a pull request or fork.

@zkreeg @ChinaShopBully Fix released in v4.0.0 thanks to @starfi5h

Fantastic! Thanks so much!

Thank you for the update and merge!


Library should throw exceptions

Library should throw exception and calling the library should be in try catch blocks, leaving the developer the choice that to do with the Exception.

Fixed in 1.0.0


Food Delivering Website Landing Page

Description
I want to design the UI of the food delivering company's website landing page
Additional information
I am a GSSoC'22 contributor

yeah sure you can
@mohammadshaad

whats the update

Yeah will make the PR soon @Jaideep25-tech


AVLTree Example And RedBlackTree Example

Codecov Report

Merging #1500 (b444a66) into master (5073413) will increase coverage by 0.11%.
The diff coverage is 57.14%.

@@            Coverage Diff             @@
##           master    #1500      +/-   ##
==========================================
+ Coverage   70.90%   71.01%   +0.11%
==========================================
  Files         415      415
  Lines       40295    40297       +2
==========================================
+ Hits        28571    28618      +47
+ Misses       9915     9864      -51
- Partials     1809     1815       +6

Flag
Coverage Δ

go-1.14
71.01% <57.14%> (+0.15%)
:arrow_up:

go-1.15
?

go-1.16
?

Flags with carried forward coverage won't be shown. Click here to find out more.

Impacted Files
Coverage Δ

container/gtree/gtree_btree.go
92.01% <50.00%> (-0.15%)
:arrow_down:

container/gtree/gtree_avltree.go
97.80% <100.00%> (+4.58%)
:arrow_up:

os/gspath/gspath_cache.go
84.21% <0.00%> (-10.53%)
:arrow_down:

net/gtcp/gtcp_pool.go
34.09% <0.00%> (-4.55%)
:arrow_down:

os/glog/glog_logger_rotate.go
68.78% <0.00%> (-1.47%)
:arrow_down:

container/gtree/gtree_redblacktree.go
92.72% <0.00%> (+5.57%)
:arrow_up:

Continue to review full report at Codecov.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 5073413...b444a66. Read the comment docs.


Update Protractor configuration

As described in #230 by @alecsandre the way the browser is configured in Protractor has changed.  I have made this change as well as bumping the min version of protractor.

P.S. I really don't think I broke this build ;o)

I ran into a problem with 'npm run protractor' too. I also changed chromeOnly to directConnect, and then it worked as expected. I did not bump minimum version of Protractor. I suspect chromeOnly is deprecated.


eframe: create multiple windows in sequence

Since https://github.com/emilk/egui/pull/1889 we can now open an eframe window, close it, and keep running the application.
What we want to do is to then be able to open another window and run that for a while, etc.
Thanks to https://github.com/emilk/egui/pull/1919 this now works on Windows, but this does not yet work on Mac, due to https://github.com/rust-windowing/winit/issues/2431. Linux is unknown.

Blocked on https://github.com/rust-windowing/winit/issues/2431

Linux is unknown.
Just ran examples/serial_windows on Ubuntu 22.10/Gnome. The second window opens up and then the program crashes immediately. That sounds like the behavior on Mac as described in rust-windowing/winit#2431.

https://github.com/emilk/egui/pull/3649 does not help on Mac :(

Hi, I'm having some issues with this:
https://github.com/emilk/egui/assets/59890307/d7ea2448-8eb1-4bd0-9b11-9f15b2906757
I've seen that closing the window while continuing program execution is supported, but for me, the window will freeze until either a new window is closed or the program exits.
This is with eframe = "0.26.2", and using run_and_return: true in the native options, on Windows 11.
Any workarounds, or fixes? Thanks!

Hi, has there been an update on this? I see that this has been marked as completed, but I've updated my projects to 0.29.1 and the behaviour I showed above is still happening.
Even when trying the official serial_windows example, this problem still occurs for me.
I assume this isn't the intended behaviour, but I don't know if this is experienced by others, I'm on Windows 11 if that helps.
Thanks for your time!

Just tested this on MacOS and Windows and can confirm that this doesn't work as expected (instead of disappearing, the window hangs until the next window is opened)


Please invite me to the Community Organization

Name
Afoma Orji
Discord Username (if applicable) E.g John#412
Afoma#9931
Questions & suggestions?
No response

Welcome to the community @Afoma 🙌🏾🤩

Thank you @Evavic44 . Looking forward to learning and growing together.


Theme change does not work

Hi!
I have tried to change the gray to green theme by adding as it says in the documentation (Http://docs.viewflow.io/forms_themes.html), but it did not work.
INSTALLED_APPS = [
    'material.theme.lightgreen',
    'material',
    ...
]

I have tried with firefox and chrome, both also in private mode and even from a mobile device that had no cookie from the previous web.
The code is added in the setting and has not given any error. I have also used the python manage-py collectstatic command and I have restarted the vps services.
Maybe I'm missing something ...
Thank you!

Sorry, I don't think that I can help there.
There is no magic with themes, it just overrides several css and svg files, if you use css shiped with django-material. so you should have in you template:
{% include 'material/includes/material_css.html' %}
{% include 'material/includes/material_js.html' %}

Check your setup and what's your webserver returns, for the static/material/css/materialize.forms.css and static/material/imgs/sidenav.svg


Dependency to Microsoft.Bcl.AsyncInterfaces can cause problems on certain environments running under netcoreapp3.1

Description
We recently bumped AWSSDK.SQS from <IP_ADDRESS> to <IP_ADDRESS> and ran under Ubuntu Linux under .NET Core 3.1 into the following issue
package: 'Microsoft.Bcl.AsyncInterfaces', version: '1.1.0'
path: 'lib/netstandard2.0/Microsoft.Bcl.AsyncInterfaces.dll'

More information available at
https://github.com/dotnet/orleans/issues/6028#issuecomment-540233306
The solution was to no longer have a transitive dependency but actually change to an explicit dependency like
https://github.com/Particular/NServiceBus.AmazonSQS/pull/718/commits/387e362b44a4a9da8a316d0223d2782a20028ca5
Reproduction Steps

Logs

Environment

SDK Version:
Package Version:
OS Info:
Build Environment
Targeted .NET Platform:

Resolution

[ ] :wave: I can/would-like-to implement a fix for this problem myself

This is a :bug: bug-report

The .NET Core 3.1 build of the SDK doesn't not have a dependency on Micorosft.Bcl.AsyncInterfaces  https://github.com/aws/aws-sdk-net/blob/master/sdk/src/Core/AWSSDK.Core.NetStandard.csproj#L74
Are you building something below .NET Core 3.1 but you happen to on machine that has .NET Core 3.1 installed?

It might be related to the way we restore dependencies on Linux. We are about to change the way we build and run the things on Linux. Currently, we build on Windows, port the artifacts over and then restore the platform-specific dependencies on Linux. We will soon be moving away from the legacy way of doing things. I'm happy to close this when you haven't  heard other people running into this issue.

Microsoft.Bcl.AsyncInterfaces  is not used as dependency on .NET Core 3.1. Closing this since there are no similar issues reported by customers.


S3 test nitpicks

Description of your changes

This just removes gomega and renames a package import.
I have:

[x] Read and followed Crossplane's contribution process.
[x] Run make reviewable test to ensure this PR is ready for review.

How has this code been tested

I've just run the unit tests. :)

/backport
Again!


[ai] Precise Typechecking

Packages impacted by this PR

@azure-rest/ai-inference
@azure-rest/ai-content-safety
@azure-rest/ai-language-textauthoring
@azure-rest/ai-document-intelligence
@azure-rest/ai-document-translator
@azure-rest/ai-vision-face
@azure-rest/ai-vision-image-analysis
@azure-rest/ai-translation-text
@azure/ai-language-conversations
@azure/ai-language-text
@azure/ai-metrics-advisor
@azure/ai-text-analytics

Issues associated with this PR
N/A
Describe the problem that is addressed by this PR
Tests are not being typechecked and linting isn't configured correctly. This PR migrates those libraries to precise typechecking setup introduced in https://github.com/Azure/azure-sdk-for-js/pull/31786
What are the possible designs available to address the problem? If there are more than one possible design, why was the one in this PR chosen?
Are there test cases added in this PR? (If not, why?)
N/A
Provide a list of related PRs (if any)
https://github.com/Azure/azure-sdk-for-js/pull/31786
Command used to generate this PR:**(Applicable only to SDK release request PRs)
Checklists

[x] Added impacted package name to the issue description
[ ] Does this PR needs any fixes in the SDK Generator?** (If so, create an Issue in the Autorest/typescript repository and link it here)
[ ] Added a changelog (if necessary)

API change check
API changes are not detected in this pull request.


OData: invalid instance annotation name

as reported here.
as the reporter notes, the problem is likely the period.

.

closed via #210


Auto-backup and restore capabilities

the prototype site must be able to follow the daily backup scripts to backup data to S3 bucket, as well as the restore from S3 capability work properly.
The backup script works manually, so maybe just the automation script needs to be enabled. Dan will test the restore to a new instance.

DONE!!!!


Feature: Sagemaker list endpoints and endpoint configs

Adds support for Sagemaker list_endpoints and list_endpoint_configs methods

Hi @JoshLevyMN, the linting should be fixed on master - would you mind rebasing these PR's? I'll have a look at the contents once we can get the build to pass.

I rebased and added some additional test coverage, not sure what is causing the testserver to fail.


JIT also supported by Azure Firewall, not only NSG

I believe JIT is now also supported with only Azure Firewall, thus the following error message shouldn't be visible anymore?
Unsupported - VMs without JIT enabled and which don't support the feature. Your VM might be in this tab for the following reasons:
Missing network security group (NSG) - JIT requires an NSG to be configured
Also, availability should also be updated as far as I can see.
Source https://azure.microsoft.com/en-us/updates/just-in-time-access-now-supports-azure-firewall/

Document Details
⚠ Do not edit this section. It is required for docs.microsoft.com ➟ GitHub issue linking.

ID: 25f0758b-8274-d2b5-4702-2c7ca6b0b14a
Version Independent ID: d1215107-abf9-fefd-a63b-b20ec3f7f744
Content: Just-in-time virtual machine access in Azure Security Center
Content Source: articles/security-center/security-center-just-in-time.md
Service: security-center
GitHub Login: @memildin
Microsoft Alias: memildin

@mMDG0Oowa-3TPkpg7JOmdx4ff4IfPvyCGSAHbnh
Thanks for your feedback! We will investigate and update as appropriate.

Hi @mMDG0Oowa-3TPkpg7JOmdx4ff4IfPvyCGSAHbnh, thanks for the feedback and for taking the time to help us improve the docs.
I've made an update to correct the issue you raised. The change should go live within the next 48hrs.
I'm going to close this issue, but feel free to comment again here or open a new one if you have additional requests.
#please-close


DMX Tester which can send and recive DMX values

Hi,
I want to build a little DMX tester box. And I have some questions.

I want to have a little LED turn on as soon as any DMX value is received. It should check all 512 addresses and as soon as it receives one value above 0 turns the LED on. Is this possible or do you have to specify the address it "listens" to?

I also want to make use of the Send function to send a test signal. How would I fade every address to 255 and back? And can I simultaneously us the Rx bin for receiving and the Tx pin for sending at the same time?

Are teensy 3.2 boards supported? and if not, an Arduino Leonardo should be fine, right?

1 The DMXSerial always receives all bytes on the wire into the buffer. You need to loop through all buffer offsets and see when there is a value on any channel.
2 see DMXSerialFlow.ino
3 teensy no, leonardo yes.


We are waiting for the Latest SDK for Support swift 3?

We are waiting for the Latest SDK for Support swift 3?

Let me echo that.  What gives Uber?

Hello, sorry for the delay, I have just updated #60 with the latest information. Please use that thread for all Swift 3 related discussion

Ok thx
2016-12-29 19:57 GMT+03:00 John Brophy<EMAIL_ADDRESS>
Closed #148 https://github.com/uber/rides-ios-sdk/issues/148.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
https://github.com/uber/rides-ios-sdk/issues/148#event-907502310, or mute
the thread
https://github.com/notifications/unsubscribe-auth/AJLqd2Rx-1TP5Ku4ZKZjMS1MaS-PXvipks5rM-aNgaJpZM4LVd6N
.

Thank you!


DirectiveTokenDescriptor should be (sealed or abstract) and immutable

Why not simply a struct to reduce pressure on the GC?

We expect about 20 of these to exist ever..  a struct might be suitable or not depending on where the design ends up.

b17e506ce83007bddd7838e9a71958bc002f7660


Old heartbeat items are not cleared from local storage

Hey @aermin,
Nice work on the library! I've been testing this out and noticed that for every browser tab refresh, a new item gets added to local storage.

I thought about a potential fix, and looking through the code I see there is an "unload" handler in heartBeat.ts that could be modified to clear the heartbeat item. However, "unload" events are not reliably fired in many browsers so might need to think of something else.

Another idea I had, is cleaning up the old values on initialisation rather than on closing:

Prefix the heartbeat item keys with a known constant value.
Whenever LockManager is created, iterate over all Local Storage items, and clear the ones that start with the prefix and have a timestamp that is old (wouldn't want to delete active heartbeats items from another tab).

Hi @tomas-c , thx your detailed testing, feedback, and advice ，It is very helpful!
this issue is because  I clean the old, useless heartbeat key by the ids which calculate from query(), It only returns the locks' client ids, It is wrong, the heartbeat keys from the non-locks client should also be clean when destroying this client.
This the fix Mr, pls help to review ^ ^
https://github.com/aermin/web-locks/pull/39
thx ^ ^

Another idea I had, is cleaning up the old values on initialisation rather than on closing:

Prefix the heartbeat item keys with a known constant value.
Whenever LockManager is created, iterate over all Local Storage items, and clear the ones that start with the prefix and have a timestamp that is old (wouldn't want to delete active heartbeats items from another tab).

the diff is I use a locally stored array to record the client ids, then iterate this array, detect it, clean the useless ones.
clear the ones that start with the prefix

If clear the ones that start with the prefix, It is well, but afraid clear the same prefix's storage key of the app  eventuality

The reason why I suggested the prefix if not to avoid collisions with different apps. It's to avoid having shared array of all clientIds that can be corrupted due to two clients doing overlapping read-write operations.
The prefix allows you to find out all clientIds by doing this Object.keys(localStorage).filter(it => it.startsWith(PREFIX)) without the need for a shared array that can be corrupted.

yep, I got you mean, I just concern about the developer use the same PREFIX  as storage key PREFIX, and we clear it by mistake😢
Object.keys(localStorage).filter(it => it.startsWith(PREFIX))

I have tested the storage reading and writing operation spending time, It is very fast, millisecond-level. In my testing, do getItem JSON.Parse JSON.Stringfy setItem , which for reading and writing, complete among 1 millisecond.
So when we reopen the tabs, it is not the real millisecond-level same time.

So It looks fine for this case:

having shared array of all clientIds that can be corrupted due to two clients doing overlapping read-write operations.

yep, I got your mean, I just concern about the developer use the same PREFIX as storage key PREFIX, and we clear it by mistake😢
Object.keys(localStorage).filter(it => it.startsWith(PREFIX))

But it may be difficult to happen if ignore it, indeed your suggestion would be better🤔 Let me think again
@unadlib do you have any idea?

My suggested option only makes sense if you care about preventing inconsistencies due to overlapping read-write operations. If the rest of the code doesn't address that (e.g. _cleanClientLocksByClientId remains as it is), then maybe it's not worth to do it here and it's fine to keep your PR as it is.

My suggested option only makes sense if you care about preventing inconsistencies due to overlapping read-write operations. If the rest of the code doesn't address that (e.g. _cleanClientLocksByClientId remains as it is), then maybe it's not worth to do it here and it's fine to keep your PR as it is.

Yep, if change according to you proposal, then _cleanClientLocksByClientId should also be prevented.

_cleanClientLocksByClientId

by seems

My suggested option only makes sense if you care about preventing inconsistencies due to overlapping read-write operations. If the rest of the code doesn't address that (e.g. _cleanClientLocksByClientId remains as it is), then maybe it's not worth to do it here and it's fine to keep your PR as it is.

Yep, if change according to you proposal, then _cleanClientLocksByClientId should also be prevented.

And seems it hard to find another way this instead of _cleanClientLocksByClientId implement. We have to modify the same storage value to implement the locks.


Space not properly escaped

I was getting signature failures when a query parameter had a properly escaped space. I replaced the existing escape method with url.QueryEscape and fixed. Patch below.
diff --git a/oauth.go b/oauth.go
index d8e0ea2..07cccac 100644
--- a/oauth.go
+++ b/oauth.go
@@ -957,23 +957,7 @@ func (s *RSASigner) SignatureMethod() string {
 }

 func escape(s string) string {
-       t := make([]byte, 0, 3*len(s))
-       for i := 0; i < len(s); i++ {
-               c := s[i]
-               if isEscapable(c) {
-                       t = append(t, '%')
-                       t = append(t, "0123456789ABCDEF"[c>>4])
-                       t = append(t, "0123456789ABCDEF"[c&15])
-               } else {
-                       t = append(t, s[i])
-               }
-       }
-       return string(t)
-}
-
-func isEscapable(b byte) bool {
-       return !('A' <= b && b <= 'Z' || 'a' <= b && b <= 'z' || '0' <= b && b <= '9' || b == '-' || b == '.' || b == '_' || b == '~')
-
+       return url.QueryEscape(s)
 }

According to this https://dev.twitter.com/oauth/overview/creating-signatures, space should be encoded into %20, not + character. So the oauth package does this correctly.  Maybe they implemented this incorrectly.


PHP 8.3 support

It would be really cool if the extension can be used within PHP 8.3 projects.

Sorry, issue came in while I was on vacation, and then went under with all the other e-mails. Thanks for noticing, the extension has been updated (version 1.5.3)


Use MessageFormatter to format the user and group about text

Exactly as the title says, this uses the MessageFormatter service to expose formatting capabilities in the about section.  I haven't really tested it, because I'm just doing this between things today.  Merge with caution.
This should do Convert newlines in "about" section to <br> tags

Looks good :+1: Is there any worry about people putting YouTube/Gfy embeds in their about?

I for one encourage people to put more gifs and gfycats in their about box :D

Will this also use onebox when that is merged in?

Yep. This also provides spoilers (which probably won't work actually, we should fix that) and if we add markdown here it also adds it to feeds.


Added DCE

@bradloffDCE First stage of verification passed, official domain is dce.k12.wi.us as far as I verified. This is just an informational note. Pull request is still in the review. I appreciate your patience while waiting for the final decision.

@bradloffDCE Thank you for your patience while waiting for a review and processing your request. Pull request merged.