Repository: ansible-collections/community.aws

Issue:
Some documentation errors in the cloudwatchlogs_log_group_metric_filter and ecs_service modules
<!--- Verify first that your improvement is not already reported on GitHub -->
<!--- Also test if the latest release and devel branch are affected too -->
<!--- Complete *all* sections as described, this form is processed automatically -->

##### SUMMARY

I've written a schema for DOCUMENTATION, RETURN, etc.  There are a few problems in the structure of the return docs on a pair of modules:
```
E   module -> community.aws.cloudwatchlogs_log_group_metric_filter -> return -> metric_filters -> contains -> creation_time
E     none is not an allowed value (type=type_error.none.not_allowed)
E   module -> community.aws.cloudwatchlogs_log_group_metric_filter -> return -> metric_filters -> contains -> filter_name
E     none is not an allowed value (type=type_error.none.not_allowed)
E   module -> community.aws.cloudwatchlogs_log_group_metric_filter -> return -> metric_filters -> contains -> filter_pattern
E     none is not an allowed value (type=type_error.none.not_allowed)
E   module -> community.aws.cloudwatchlogs_log_group_metric_filter -> return -> metric_filters -> contains -> log_group_name
E     none is not an allowed value (type=type_error.none.not_allowed)
E   module -> community.aws.cloudwatchlogs_log_group_metric_filter -> return -> metric_filters -> contains -> metric_filter_count
E     none is not an allowed value (type=type_error.none.not_allowed)
E   module -> community.aws.ecs_service -> doc -> options -> placement_constraints -> suboptions
E     none is not an allowed value (type=type_error.none.not_allowed)
```

Since this schema is new, it is possible that None should be allowed in one or all of the locations listed.  If so, let me know and we can discuss whether/how to update the schema to allow that.

##### ISSUE TYPE
- Documentation Report

##### COMPONENT NAME
* cloudwatchlogs_log_group_metric_filter.py
* ecs_service.py

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below

```



Discussion:

Resolving patch:
diff --git a/plugins/modules/cloudwatchlogs_log_group_metric_filter.py b/plugins/modules/cloudwatchlogs_log_group_metric_filter.py
--- a/plugins/modules/cloudwatchlogs_log_group_metric_filter.py
+++ b/plugins/modules/cloudwatchlogs_log_group_metric_filter.py
@@ -89,12 +89,15 @@
     description: Return the origin response value
     returned: success
     type: list
-    contains:
-        creation_time:
-        filter_name:
-        filter_pattern:
-        log_group_name:
-        metric_filter_count:
+    sample: [
+        {
+            "default_value": 3.1415,
+            "metric_name": "box_free_space",
+            "metric_namespace": "made_with_ansible",
+            "metric_value": "$.value"
+        }
+    ]
+
 """
 from ansible_collections.amazon.aws.plugins.module_utils.aws.core import AnsibleAWSModule, is_boto3_error_code, get_boto3_client_method_parameters
 from ansible_collections.amazon.aws.plugins.module_utils.ec2 import camel_dict_to_snake_dict
diff --git a/plugins/modules/ecs_service.py b/plugins/modules/ecs_service.py
--- a/plugins/modules/ecs_service.py
+++ b/plugins/modules/ecs_service.py
@@ -103,10 +103,17 @@
     placement_constraints:
         description:
           - The placement constraints for the tasks in the service.
+          - See U(https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_PlacementConstraint.html) for more details.
         required: false
         type: list
         elements: dict
         suboptions:
+          type:
+            description: The type of constraint.
+            type: str
+          expression:
+            description: A cluster query language expression to apply to the constraint.
+            type: str
     placement_strategy:
         description:
           - The placement strategy objects to use for tasks in your service. You can specify a maximum of 5 strategy rules per service.
@@ -648,8 +655,14 @@ def main():
         repeat=dict(required=False, type='int', default=10),
         force_new_deployment=dict(required=False, default=False, type='bool'),
         deployment_configuration=dict(required=False, default={}, type='dict'),
-        placement_constraints=dict(required=False, default=[], type='list'),
-        placement_strategy=dict(required=False, default=[], type='list'),
+        placement_constraints=dict(required=False, default=[], type='list', options=dict(
+            type=dict(type='str'),
+            expression=dict(type='str')
+        )),
+        placement_strategy=dict(required=False, default=[], type='list', options=dict(
+            type=dict(type='str'),
+            field=dict(type='str'),
+        )),
         health_check_grace_period_seconds=dict(required=False, type='int'),
         network_configuration=dict(required=False, type='dict', options=dict(
             subnets=dict(type='list'),


Test patch:
diff --git a/tests/sanity/ignore-2.9.txt b/tests/sanity/ignore-2.9.txt
--- a/tests/sanity/ignore-2.9.txt
+++ b/tests/sanity/ignore-2.9.txt
@@ -84,8 +84,6 @@ plugins/modules/ec2_vpc_vpn_info.py validate-modules:doc-elements-mismatch
 plugins/modules/ec2_vpc_vpn_info.py validate-modules:parameter-list-no-elements
 plugins/modules/ecs_attribute.py validate-modules:doc-elements-mismatch
 plugins/modules/ecs_attribute.py validate-modules:parameter-list-no-elements
-plugins/modules/ecs_service.py validate-modules:doc-elements-mismatch
-plugins/modules/ecs_service.py validate-modules:parameter-list-no-elements
 plugins/modules/ecs_service_info.py validate-modules:doc-elements-mismatch
 plugins/modules/ecs_service_info.py validate-modules:parameter-list-no-elements
 plugins/modules/ecs_task.py validate-modules:doc-elements-mismatch
@@ -149,4 +147,4 @@ tests/unit/mock/yaml_helper.py metaclass-boilerplate
 tests/unit/modules/conftest.py future-import-boilerplate
 tests/unit/modules/conftest.py metaclass-boilerplate
 tests/unit/modules/utils.py future-import-boilerplate
-tests/unit/modules/utils.py metaclass-boilerplate
\ No newline at end of file
+tests/unit/modules/utils.py metaclass-boilerplate