Repository: ansible-collections/community.aws

Issue:
ecs_taskdefinition healthCheck
### Summary

`ecs_taskdefinition.containers` accepts `healthCheck`, which is a dictionary. However, it's not explained what the dictionary looks like, and there's no examples at all.

### Issue Type

Documentation Report

### Component Name

ecs_taskdefinition

### Ansible Version

```console (paste below)
$ ansible --version
ansible [core 2.13.2]
  config file = None
  configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.8/dist-packages/ansible
  ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]
  jinja version = 3.1.2
  libyaml = True
```


### Collection Versions

```console (paste below)
$ ansible-galaxy collection list
# /usr/local/lib/python3.8/dist-packages/ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    3.3.1
ansible.netcommon             3.0.1
ansible.posix                 1.4.0
ansible.utils                 2.6.1
ansible.windows               1.10.0
arista.eos                    5.0.1
awx.awx                       21.4.0
azure.azcollection            1.13.0
check_point.mgmt              2.3.0
chocolatey.chocolatey         1.3.0
cisco.aci                     2.2.0
cisco.asa                     3.1.0
cisco.dnac                    6.5.2
cisco.intersight              1.0.19
cisco.ios                     3.2.0
cisco.iosxr                   3.2.0
cisco.ise                     2.5.0
cisco.meraki                  2.10.1
cisco.mso                     2.0.0
cisco.nso                     1.0.3
cisco.nxos                    3.1.0
cisco.ucs                     1.8.0
cloud.common                  2.1.2
cloudscale_ch.cloud           2.2.2
community.aws                 3.4.0
community.azure               1.1.0
community.ciscosmb            1.0.5
community.crypto              2.4.0
community.digitalocean        1.21.0
community.dns                 2.3.0
community.docker              2.7.0
community.fortios             1.0.0
community.general             5.4.0
community.google              1.0.0
community.grafana             1.5.1
community.hashi_vault         3.1.0
community.hrobot              1.5.0
community.libvirt             1.1.0
community.mongodb             1.4.2
community.mysql               3.3.0
community.network             4.0.1
community.okd                 2.2.0
community.postgresql          2.2.0
community.proxysql            1.4.0
community.rabbitmq            1.2.2
community.routeros            2.2.0
community.sap                 1.0.0
community.sap_libs            1.2.0
community.skydive             1.0.0
community.sops                1.2.3
community.vmware              2.7.0
community.windows             1.10.0
community.zabbix              1.7.0
containers.podman             1.9.4
cyberark.conjur               1.1.0
cyberark.pas                  1.0.14
dellemc.enterprise_sonic      1.1.1
dellemc.openmanage            5.5.0
dellemc.os10                  1.1.1
dellemc.os6                   1.0.7
dellemc.os9                   1.0.4
f5networks.f5_modules         1.18.0
fortinet.fortimanager         2.1.5
fortinet.fortios              2.1.6
frr.frr                       2.0.0
gluster.gluster               1.0.2
google.cloud                  1.0.2
hetzner.hcloud                1.8.1
hpe.nimble                    1.1.4
ibm.qradar                    2.0.0
ibm.spectrum_virtualize       1.9.0
infinidat.infinibox           1.3.3
infoblox.nios_modules         1.3.0
inspur.sm                     2.0.0
junipernetworks.junos         3.1.0
kubernetes.core               2.3.2
mellanox.onyx                 1.0.0
netapp.aws                    21.7.0
netapp.azure                  21.10.0
netapp.cloudmanager           21.18.0
netapp.elementsw              21.7.0
netapp.ontap                  21.21.0
netapp.storagegrid            21.10.0
netapp.um_info                21.8.0
netapp_eseries.santricity     1.3.0
netbox.netbox                 3.7.1
ngine_io.cloudstack           2.2.4
ngine_io.exoscale             1.0.0
ngine_io.vultr                1.1.2
openstack.cloud               1.8.0
openvswitch.openvswitch       2.1.0
ovirt.ovirt                   2.2.0
purestorage.flasharray        1.13.0
purestorage.flashblade        1.9.0
purestorage.fusion            1.0.2
sensu.sensu_go                1.13.1
servicenow.servicenow         1.0.6
splunk.es                     2.0.0
t_systems_mms.icinga_director 1.30.1
theforeman.foreman            3.4.0
vmware.vmware_rest            2.2.0
vyos.vyos                     3.0.1
wti.remote                    1.0.4
```


### Configuration

```console (paste below)
$ ansible-config dump --only-changed

```


### OS / Environment

_No response_

### Additional Information

Clarifies what kind of dictionary the healthCheck parameter expects. Provides an example to help developers implement healthCheck more smoothly.

### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct


Discussion:
For example, I tried
```yml
healthCheck:
        command: [ "CMD-SHELL", "wget -q -O /dev/null -T 5 http://localhost:3000/ping || exit 1" ]
        startPeriod: 60
```
but this did not make it into the JSON submitted to ECS.
cc @Java1Guy @alinabuzachis @jillr @markuman @s-hertel @tremble
[click here for bot help](https://github.com/ansible/ansibullbot/blob/master/ISSUE_HELP.md)
<!--- boilerplate: notify --->
@aschereT Thank you for raising this. Would you be willing to open a PR to update the documentation and add an example?
@aschereT It must look like this 

```yml

    - name: update_taskdefinition
      ecs_taskdefinition:
        family: dplctrl
        state: present
        network_mode: awsvpc
        launch_type: FARGATE
        execution_role_arn: "arn:aws:iam::1234567890:role/ecsTaskExecutionRole"
        task_role_arn: "arn:aws:iam::1234567890:role/dplctrl"
        force_create: true
        region: eu-central-1
        cpu: "256"
        memory: "512"
        containers:
          - name: dplctrl
            memoryReservation: 256
            essential: true
            image: "{{ IMAGE }}"
            secrets:
              - valueFrom: arn:aws:ssm:eu-central-1:1234567890:parameter/test.website.redis_password
                name: REDIS_PASSWORD
            portMappings:
              - containerPort: 8000
                hostPort: 8000
            healthCheck:
              command:
                - CMD-SHELL
                - /app/healthcheck.py
              interval: 60
              retries: 3
              startPeriod: 15
              timeout: 15
            logConfiguration:
              logDriver: awslogs
              options:
                awslogs-group: /deploy.test
                awslogs-region: eu-central-1
                awslogs-stream-prefix: ecs
      register: output
```
> @aschereT Thank you for raising this. Would you be willing to open a PR to update the documentation and add an example?

I made the issue because I didn't know what the format is in the first place...

@markuman Thanks for an example! This is what I'm looking for!

I also made a PR now that I know what the format looks like. https://github.com/ansible-collections/community.aws/pull/1610

Resolving patch:
diff --git a/plugins/modules/ecs_taskdefinition.py b/plugins/modules/ecs_taskdefinition.py
--- a/plugins/modules/ecs_taskdefinition.py
+++ b/plugins/modules/ecs_taskdefinition.py
@@ -466,6 +466,49 @@
                 description: The health check command and associated configuration parameters for the container.
                 required: False
                 type: dict
+                suboptions:
+                    command:
+                        description:
+                            - A string array representing the command that the container runs to determine if it is healthy.
+                            - >
+                              The string array must start with CMD to run the command arguments directly,
+                              or CMD-SHELL to run the command with the container's default shell.
+                            - An exit code of 0 indicates success, and non-zero exit code indicates failure.
+                        required: False
+                        type: list
+                        elements: str
+                    interval:
+                        description:
+                            - The time period in seconds between each health check execution.
+                            - You may specify between 5 and 300 seconds. The default value is 30 seconds.
+                        required: False
+                        type: int
+                        default: 30
+                    retries:
+                        description:
+                            - The number of times to retry a failed health check before the container is considered unhealthy.
+                            - You may specify between 1 and 10 retries. The default value is 3.
+                        required: False
+                        type: int
+                        default: 3
+                    startPeriod:
+                        description:
+                            - >
+                              The optional grace period to provide containers time to bootstrap
+                              before failed health checks count towards the maximum number of retries.
+                            - You can specify between 0 and 300 seconds. By default, the startPeriod is disabled.
+                            - >
+                              Note: If a health check succeeds within the startPeriod,
+                              then the container is considered healthy and any subsequent failures count toward the maximum number of retries.
+                        required: False
+                        type: int
+                    timeout:
+                        description:
+                            - The time period in seconds to wait for a health check to succeed before it is considered a failure.
+                            - You may specify between 2 and 60 seconds. The default value is 5.
+                        required: False
+                        type: int
+                        default: 5
             systemControls:
                 description: A list of namespaced kernel parameters to set in the container.
                 required: False
@@ -674,6 +717,29 @@
     memory: 1GB
     state: present
     network_mode: awsvpc
+
+# Create Task Definition with health check
+- name: Create task definition
+  community.aws.ecs_taskdefinition:
+    family: nginx
+    containers:
+    - name: nginx
+      essential: true
+      image: "nginx"
+      portMappings:
+      - containerPort: 8080
+        hostPort: 8080
+      cpu: 512
+      memory: 1024
+      healthCheck:
+        command:
+            - CMD-SHELL
+            - /app/healthcheck.py
+        interval: 60
+        retries: 3
+        startPeriod: 15
+        timeout: 15
+    state: present
 '''
 RETURN = r'''
 taskdefinition:


Test patch: