ecs_service: add Service Connect support and wait-on-present - #2408
ecs_service: add Service Connect support and wait-on-present#2408jonpspri wants to merge 10 commits into
Conversation
Add service_connect_configuration parameter to ecs_service module for creating and updating ECS services with Service Connect. The idempotency comparison reads serviceConnectConfiguration from the primary deployment (where AWS returns it) and uses a recursive subset check to tolerate AWS-populated defaults like discoveryName. Extend wait parameter to support state=present using the services_stable waiter, blocking until runningCount matches desiredCount. Additional improvements: - Convert positional args to keyword args at create_service and update_service call sites to prevent silent breakage on reordering - Extract is_dict_subset into plugins/module_utils/dict.py as a reusable utility with order-insensitive list comparison via list_sort_key parameter Includes unit tests for is_dict_subset and integration tests covering Service Connect create, idempotency, update, disable, and delete.
Docs Build 📝Thank you for contribution!✨ The docsite for this PR is available for download as an artifact from this run: You can compare to the docs for the File changes:
Click to see the diff comparison.NOTE: only file modifications are shown here. New and deleted files are excluded. The diff output was truncated because it exceeded the maximum size. diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_condition_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_condition_module.html
index fe0377f..b37d3b9 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_condition_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_condition_module.html
@@ -7,7 +7,7 @@
<meta content="2.24.0" name="antsibull-docs" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>community.aws.aws_waf_condition module — Ansible collections documentation</title>
+ <title>community.aws.aws_waf_condition — Ansible collections documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=41de9001" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/ansible.css?v=b54c304f" />
<link rel="stylesheet" type="text/css" href="../../../_static/antsibull-minimal.css" />
@@ -100,7 +100,7 @@
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
- <li class="breadcrumb-item active">community.aws.aws_waf_condition module</li>
+ <li class="breadcrumb-item active">community.aws.aws_waf_condition</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
@@ -111,19 +111,15 @@
<div itemprop="articleBody">
- <span class="target" id="ansible-collections-community-aws-aws-waf-condition-module"></span><section id="community-aws-aws-waf-condition-module">
-<h1>community.aws.aws_waf_condition module<a class="headerlink" href="#community-aws-aws-waf-condition-module" title="Link to this heading"></a></h1>
+ <span class="target" id="ansible-collections-community-aws-aws-waf-condition-module"></span><section id="community-aws-aws-waf-condition">
+<h1>community.aws.aws_waf_condition<a class="headerlink" href="#community-aws-aws-waf-condition" title="Link to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This redirect is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
+<p>This plugin was part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
</div>
-<ul class="simple">
-<li><p>This redirect has been <strong>deprecated</strong>. Please update your tasks to use the new name <code class="docutils literal notranslate"><span class="pre">community.aws.waf_condition</span></code> instead.
-It will be removed in a major release after 2027-01-01 of community.aws.</p></li>
-<li><p>This is a redirect to the <a class="reference internal" href="waf_condition_module.html#ansible-collections-community-aws-waf-condition-module"><span class="std std-ref">community.aws.waf_condition module</span></a>.</p></li>
-<li><p>This redirect does <strong>not</strong> work with Ansible 2.9.</p></li>
-<li><p>The collection contains the following information on this deprecation: the community.aws.aws_waf_condition alias has been deprecated. Please update your tasks to use community.aws.waf_condition.</p></li>
-</ul>
+<p>This module has been removed
+in version 12.0.0 of community.aws.
+Amazon has retired the `WAF Classic` service. Please use the `AWS WAF (WAFv2)` service and modules instead.</p>
</section>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_info_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_info_module.html
index a79d051..de7dbf0 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_info_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_info_module.html
@@ -7,7 +7,7 @@
<meta content="2.24.0" name="antsibull-docs" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>community.aws.aws_waf_info module — Ansible collections documentation</title>
+ <title>community.aws.aws_waf_info — Ansible collections documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=41de9001" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/ansible.css?v=b54c304f" />
<link rel="stylesheet" type="text/css" href="../../../_static/antsibull-minimal.css" />
@@ -100,7 +100,7 @@
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
- <li class="breadcrumb-item active">community.aws.aws_waf_info module</li>
+ <li class="breadcrumb-item active">community.aws.aws_waf_info</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
@@ -111,19 +111,15 @@
<div itemprop="articleBody">
- <span class="target" id="ansible-collections-community-aws-aws-waf-info-module"></span><section id="community-aws-aws-waf-info-module">
-<h1>community.aws.aws_waf_info module<a class="headerlink" href="#community-aws-aws-waf-info-module" title="Link to this heading"></a></h1>
+ <span class="target" id="ansible-collections-community-aws-aws-waf-info-module"></span><section id="community-aws-aws-waf-info">
+<h1>community.aws.aws_waf_info<a class="headerlink" href="#community-aws-aws-waf-info" title="Link to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This redirect is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
+<p>This plugin was part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
</div>
-<ul class="simple">
-<li><p>This redirect has been <strong>deprecated</strong>. Please update your tasks to use the new name <code class="docutils literal notranslate"><span class="pre">community.aws.waf_info</span></code> instead.
-It will be removed in a major release after 2027-01-01 of community.aws.</p></li>
-<li><p>This is a redirect to the <a class="reference internal" href="waf_info_module.html#ansible-collections-community-aws-waf-info-module"><span class="std std-ref">community.aws.waf_info module</span></a>.</p></li>
-<li><p>This redirect does <strong>not</strong> work with Ansible 2.9.</p></li>
-<li><p>The collection contains the following information on this deprecation: the community.aws.aws_waf_info alias has been deprecated. Please update your tasks to use community.aws.waf_info.</p></li>
-</ul>
+<p>This module has been removed
+in version 12.0.0 of community.aws.
+Amazon has retired the `WAF Classic` service. Please use the `AWS WAF (WAFv2)` service and modules instead.</p>
</section>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_rule_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_rule_module.html
index f4a298b..fdfe81c 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_rule_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_rule_module.html
@@ -7,7 +7,7 @@
<meta content="2.24.0" name="antsibull-docs" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>community.aws.aws_waf_rule module — Ansible collections documentation</title>
+ <title>community.aws.aws_waf_rule — Ansible collections documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=41de9001" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/ansible.css?v=b54c304f" />
<link rel="stylesheet" type="text/css" href="../../../_static/antsibull-minimal.css" />
@@ -100,7 +100,7 @@
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
- <li class="breadcrumb-item active">community.aws.aws_waf_rule module</li>
+ <li class="breadcrumb-item active">community.aws.aws_waf_rule</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
@@ -111,19 +111,15 @@
<div itemprop="articleBody">
- <span class="target" id="ansible-collections-community-aws-aws-waf-rule-module"></span><section id="community-aws-aws-waf-rule-module">
-<h1>community.aws.aws_waf_rule module<a class="headerlink" href="#community-aws-aws-waf-rule-module" title="Link to this heading"></a></h1>
+ <span class="target" id="ansible-collections-community-aws-aws-waf-rule-module"></span><section id="community-aws-aws-waf-rule">
+<h1>community.aws.aws_waf_rule<a class="headerlink" href="#community-aws-aws-waf-rule" title="Link to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This redirect is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
+<p>This plugin was part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
</div>
-<ul class="simple">
-<li><p>This redirect has been <strong>deprecated</strong>. Please update your tasks to use the new name <code class="docutils literal notranslate"><span class="pre">community.aws.waf_rule</span></code> instead.
-It will be removed in a major release after 2027-01-01 of community.aws.</p></li>
-<li><p>This is a redirect to the <a class="reference internal" href="waf_rule_module.html#ansible-collections-community-aws-waf-rule-module"><span class="std std-ref">community.aws.waf_rule module</span></a>.</p></li>
-<li><p>This redirect does <strong>not</strong> work with Ansible 2.9.</p></li>
-<li><p>The collection contains the following information on this deprecation: the community.aws.aws_waf_rule alias has been deprecated. Please update your tasks to use community.aws.waf_rule.</p></li>
-</ul>
+<p>This module has been removed
+in version 12.0.0 of community.aws.
+Amazon has retired the `WAF Classic` service. Please use the `AWS WAF (WAFv2)` service and modules instead.</p>
</section>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_web_acl_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_web_acl_module.html
index 2be63e0..41391e7 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/aws_waf_web_acl_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/aws_waf_web_acl_module.html
@@ -7,7 +7,7 @@
<meta content="2.24.0" name="antsibull-docs" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>community.aws.aws_waf_web_acl module — Ansible collections documentation</title>
+ <title>community.aws.aws_waf_web_acl — Ansible collections documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=41de9001" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/ansible.css?v=b54c304f" />
<link rel="stylesheet" type="text/css" href="../../../_static/antsibull-minimal.css" />
@@ -100,7 +100,7 @@
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
- <li class="breadcrumb-item active">community.aws.aws_waf_web_acl module</li>
+ <li class="breadcrumb-item active">community.aws.aws_waf_web_acl</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
@@ -111,19 +111,15 @@
<div itemprop="articleBody">
- <span class="target" id="ansible-collections-community-aws-aws-waf-web-acl-module"></span><section id="community-aws-aws-waf-web-acl-module">
-<h1>community.aws.aws_waf_web_acl module<a class="headerlink" href="#community-aws-aws-waf-web-acl-module" title="Link to this heading"></a></h1>
+ <span class="target" id="ansible-collections-community-aws-aws-waf-web-acl-module"></span><section id="community-aws-aws-waf-web-acl">
+<h1>community.aws.aws_waf_web_acl<a class="headerlink" href="#community-aws-aws-waf-web-acl" title="Link to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This redirect is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
+<p>This plugin was part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
</div>
-<ul class="simple">
-<li><p>This redirect has been <strong>deprecated</strong>. Please update your tasks to use the new name <code class="docutils literal notranslate"><span class="pre">community.aws.waf_web_acl</span></code> instead.
-It will be removed in a major release after 2027-01-01 of community.aws.</p></li>
-<li><p>This is a redirect to the <a class="reference internal" href="waf_web_acl_module.html#ansible-collections-community-aws-waf-web-acl-module"><span class="std std-ref">community.aws.waf_web_acl module</span></a>.</p></li>
-<li><p>This redirect does <strong>not</strong> work with Ansible 2.9.</p></li>
-<li><p>The collection contains the following information on this deprecation: the community.aws.aws_waf_web_acl alias has been deprecated. Please update your tasks to use community.aws.waf_web_acl.</p></li>
-</ul>
+<p>This module has been removed
+in version 12.0.0 of community.aws.
+Amazon has retired the `WAF Classic` service. Please use the `AWS WAF (WAFv2)` service and modules instead.</p>
</section>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/ecs_service_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/ecs_service_module.html
index 6c124a5..03518f5 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/ecs_service_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/ecs_service_module.html
@@ -644,6 +644,56 @@ see <a class="reference internal" href="#ansible-collections-community-aws-ecs-s
</div></td>
</tr>
<tr class="row-even"><td><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration"><strong>service_connect_configuration</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
+<p><em class="ansible-option-versionadded">added in community.aws 11.1.0</em></p>
+</div></td>
+<td><div class="ansible-option-cell"><p>The configuration for this service to discover and connect to services, and be discovered by, and connected from, other services within a namespace.</p>
+<p>See <a class="reference external" href="https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectConfiguration.html">https://docs.aws.amazon.com/AmazonECS/latest/APIReference/API_ServiceConnectConfiguration.html</a> for more details.</p>
+<p>When determining whether the service needs updating, only the fields explicitly provided are compared against the existing configuration. AWS may populate additional default fields (such as <code class="docutils literal notranslate"><span class="pre">discoveryName</span></code>) which are ignored for idempotency purposes. If you need to enforce a specific value for an AWS-defaulted field, include it explicitly in this configuration.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration/access_log_configuration"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration-access-log-configuration"><strong>access_log_configuration</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration/access_log_configuration" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The access log configuration for Service Connect.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration/enabled"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration-enabled"><strong>enabled</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration/enabled" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span> / <span class="ansible-option-required">required</span></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>Specifies whether to use Service Connect with this service.</p>
+<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
+<ul class="simple">
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">false</span></code></p></li>
+<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">true</span></code></p></li>
+</ul>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration/log_configuration"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration-log-configuration"><strong>log_configuration</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration/log_configuration" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The log configuration for the container.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration/namespace"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration-namespace"><strong>namespace</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration/namespace" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The namespace name or full Amazon Resource Name (ARN) of the AWS Cloud Map namespace for use with Service Connect.</p>
+</div></td>
+</tr>
+<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<div class="ansibleOptionAnchor" id="parameter-service_connect_configuration/services"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-connect-configuration-services"><strong>services</strong></p>
+<a class="ansibleOptionLink" href="#parameter-service_connect_configuration/services" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=dictionary</span></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The list of Service Connect service objects.</p>
+</div></td>
+</tr>
+<tr class="row-even"><td><div class="ansible-option-cell">
<div class="ansibleOptionAnchor" id="parameter-service_registries"></div><p class="ansible-option-title" id="ansible-collections-community-aws-ecs-service-module-parameter-service-registries"><strong>service_registries</strong></p>
<a class="ansibleOptionLink" href="#parameter-service_registries" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=dictionary</span></p>
</div></td>
@@ -732,8 +782,9 @@ see <a class="reference internal" href="#ansible-collections-community-aws-ecs-s
<a class="ansibleOptionLink" href="#parameter-wait" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
<p><em class="ansible-option-versionadded">added in community.aws 4.1.0</em></p>
</div></td>
-<td><div class="ansible-option-cell"><p>Whether or not to wait for the service to be inactive.</p>
-<p>Waits only when <em>state</em> is <code class="docutils literal notranslate"><span class="pre">absent</span></code>.</p>
+<td><div class="ansible-option-cell"><p>Whether or not to wait for the service to reach the desired state.</p>
+<p>When <em>state=present</em>, waits for the service to be stable with tasks in the RUNNING state.</p>
+<p>When <em>state=absent</em>, waits for the service to be inactive.</p>
<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
<ul class="simple">
<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">false</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
@@ -840,6 +891,32 @@ see <a class="reference internal" href="#ansible-collections-community-aws-ecs-s
<span class="w"> </span><span class="nt">Firstname</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">jane</span>
<span class="w"> </span><span class="nt">lastName</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">doe</span>
<span class="w"> </span><span class="nt">propagate_tags</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">SERVICE</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create ECS Service with Service Connect configuration</span>
+<span class="w"> </span><span class="nt">community.aws.ecs_service</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">present</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">service-connect-test</span>
+<span class="w"> </span><span class="nt">cluster</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my_cluster</span>
+<span class="w"> </span><span class="nt">task_definition</span><span class="p">:</span><span class="w"> </span><span class="s">'my-task:1'</span>
+<span class="w"> </span><span class="nt">desired_count</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">1</span>
+<span class="w"> </span><span class="nt">service_connect_configuration</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">enabled</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
+<span class="w"> </span><span class="nt">namespace</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-cloudmap-namespace</span>
+<span class="w"> </span><span class="nt">services</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">port_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">http</span>
+<span class="w"> </span><span class="nt">client_aliases</span><span class="p">:</span>
+<span class="w"> </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">port</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">80</span>
+
+<span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Create service and wait for tasks to be running</span>
+<span class="w"> </span><span class="nt">community.aws.ecs_service</span><span class="p">:</span>
+<span class="w"> </span><span class="nt">state</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">present</span>
+<span class="w"> </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my-service</span>
+<span class="w"> </span><span class="nt">cluster</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">my_cluster</span>
+<span class="w"> </span><span class="nt">task_definition</span><span class="p">:</span><span class="w"> </span><span class="s">'my-task:1'</span>
+<span class="w"> </span><span class="nt">desired_count</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">2</span>
+<span class="w"> </span><span class="nt">wait</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">true</span>
+<span class="w"> </span><span class="nt">delay</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">10</span>
+<span class="w"> </span><span class="nt">repeat</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">30</span>
</pre></div>
</div>
</section>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/index.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/index.html
index 7f63cd4..4ec2fe4 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/index.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/index.html
@@ -307,10 +307,6 @@
<li><p><a class="reference internal" href="stepfunctions_state_machine_execution_module.html#ansible-collections-community-aws-stepfunctions-state-machine-execution-module"><span class="std std-ref">stepfunctions_state_machine_execution module</span></a> – Start or stop execution of an AWS Step Functions state machine</p></li>
<li><p><a class="reference internal" href="storagegateway_info_module.html#ansible-collections-community-aws-storagegateway-info-module"><span class="std std-ref">storagegateway_info module</span></a> – Fetch AWS Storage Gateway information</p></li>
<li><p><a class="reference internal" href="sts_session_token_module.html#ansible-collections-community-aws-sts-session-token-module"><span class="std std-ref">sts_session_token module</span></a> – obtain a session token from the AWS Security Token Service</p></li>
-<li><p><a class="reference internal" href="waf_condition_module.html#ansible-collections-community-aws-waf-condition-module"><span class="std std-ref">waf_condition module</span></a> – Create and delete WAF Conditions <strong class="ansible-deprecation-marker">DEPRECATED: REMOVED IN 12.0.0</strong></p></li>
-<li><p><a class="reference internal" href="waf_info_module.html#ansible-collections-community-aws-waf-info-module"><span class="std std-ref">waf_info module</span></a> – Retrieve information for WAF ACLs, Rules, Conditions and Filters <strong class="ansible-deprecation-marker">DEPRECATED: REMOVED IN 12.0.0</strong></p></li>
-<li><p><a class="reference internal" href="waf_rule_module.html#ansible-collections-community-aws-waf-rule-module"><span class="std std-ref">waf_rule module</span></a> – Create and delete WAF Rules <strong class="ansible-deprecation-marker">DEPRECATED: REMOVED IN 12.0.0</strong></p></li>
-<li><p><a class="reference internal" href="waf_web_acl_module.html#ansible-collections-community-aws-waf-web-acl-module"><span class="std std-ref">waf_web_acl module</span></a> – Create and delete WAF Web ACLs <strong class="ansible-deprecation-marker">DEPRECATED: REMOVED IN 12.0.0</strong></p></li>
<li><p><a class="reference internal" href="wafv2_ip_set_module.html#ansible-collections-community-aws-wafv2-ip-set-module"><span class="std std-ref">wafv2_ip_set module</span></a> – wafv2_ip_set</p></li>
<li><p><a class="reference internal" href="wafv2_ip_set_info_module.html#ansible-collections-community-aws-wafv2-ip-set-info-module"><span class="std std-ref">wafv2_ip_set_info module</span></a> – Get information about wafv2 ip sets</p></li>
<li><p><a class="reference internal" href="wafv2_resources_module.html#ansible-collections-community-aws-wafv2-resources-module"><span class="std std-ref">wafv2_resources module</span></a> – wafv2_web_acl</p></li>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/sts_session_token_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/sts_session_token_module.html
index 16b7826..0395797 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/sts_session_token_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/sts_session_token_module.html
@@ -22,7 +22,7 @@
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="search" title="Search" href="../../../search.html" />
- <link rel="next" title="community.aws.waf_condition module – Create and delete WAF Conditions" href="waf_condition_module.html" />
+ <link rel="next" title="community.aws.wafv2_ip_set module – wafv2_ip_set" href="wafv2_ip_set_module.html" />
<link rel="prev" title="community.aws.storagegateway_info module – Fetch AWS Storage Gateway information" href="storagegateway_info_module.html" /><!-- extra head elements for Ansible beyond RTD Sphinx Theme -->
@@ -405,7 +405,7 @@ see <a class="reference internal" href="#ansible-collections-community-aws-sts-s
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="storagegateway_info_module.html" class="btn btn-neutral float-left" title="community.aws.storagegateway_info module – Fetch AWS Storage Gateway information" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
- <a href="waf_condition_module.html" class="btn btn-neutral float-right" title="community.aws.waf_condition module – Create and delete WAF Conditions" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
+ <a href="wafv2_ip_set_module.html" class="btn btn-neutral float-right" title="community.aws.wafv2_ip_set module – wafv2_ip_set" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
diff --git a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/waf_condition_module.html b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/waf_condition_module.html
index 9610f90..e855f8a 100644
--- a/home/runner/work/community.aws/community.aws/docsbuild/base/collections/community/aws/waf_condition_module.html
+++ b/home/runner/work/community.aws/community.aws/docsbuild/head/collections/community/aws/waf_condition_module.html
@@ -7,7 +7,7 @@
<meta content="2.24.0" name="antsibull-docs" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>community.aws.waf_condition module – Create and delete WAF Conditions — Ansible collections documentation</title>
+ <title>community.aws.waf_condition — Ansible collections documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css?v=41de9001" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/ansible.css?v=b54c304f" />
<link rel="stylesheet" type="text/css" href="../../../_static/antsibull-minimal.css" />
@@ -21,9 +21,7 @@
<script src="../../../_static/doctools.js?v=fd6eb6e6"></script>
<script src="../../../_static/sphinx_highlight.js?v=6ffebe34"></script>
<script src="../../../_static/js/theme.js"></script>
- <link rel="search" title="Search" href="../../../search.html" />
- <link rel="next" title="community.aws.waf_info module – Retrieve information for WAF ACLs, Rules, Conditions and Filters" href="waf_info_module.html" />
- <link rel="prev" title="community.aws.sts_session_token module – obtain a session token from the AWS Security Token Service" href="sts_session_token_module.html" /><!-- extra head elements for Ansible beyond RTD Sphinx Theme -->
+ <link rel="search" title="Search" href="../../../search.html" /><!-- extra head elements for Ansible beyond RTD Sphinx Theme -->
@@ -74,20 +72,8 @@
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Collections:</span></p>
-<ul class="current">
-<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">Collection Index</a><ul class="current">
-<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Collections in the Community Namespace</a><ul class="current">
-<li class="toctree-l3 current"><a class="reference internal" href="index.html">Community.Aws</a><ul class="current">
-<li class="toctree-l4"><a class="reference internal" href="index.html#description">Description</a></li>
-<li class="toctree-l4"><a class="reference internal" href="index.html#communication">Communication</a></li>
-<li class="toctree-l4"><a class="reference internal" href="index.html#changelog">Changelog</a></li>
-<li class="toctree-l4 current"><a class="reference internal" href="index.html#plugin-index">Plugin Index</a></li>
-</ul>
-</li>
-</ul>
-</li>
-</ul>
-</li>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="../../index.html">Collection Index</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Plugin indexes:</span></p>
<ul>
@@ -114,13 +100,8 @@
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
- <li class="breadcrumb-item"><a href="../../index.html">Collection Index</a></li>
- <li class="breadcrumb-item"><a href="../index.html">Collections in the Community Namespace</a></li>
- <li class="breadcrumb-item"><a href="index.html">Community.Aws</a></li>
- <li class="breadcrumb-item active">community.aws.waf_condition module – Create and delete WAF Conditions</li>
+ <li class="breadcrumb-item active">community.aws.waf_condition</li>
<li class="wy-breadcrumbs-aside">
- <!-- User defined GitHub URL -->
- <a href="https://github.com/ansible-collections/community.aws/edit/main/plugins/modules/waf_condition.py?description=%23%23%23%23%23%20SUMMARY%0A%3C!—%20Your%20description%20here%20–%3E%0A%0A%0A%23%23%23%23%23%20ISSUE%20TYPE%0A-%20Docs%20Pull%20Request%0A%0A%2Blabel:%20docsite_pr" class="fa fa-github"> Edit on GitHub</a>
</li>
</ul>
<hr/>
@@ -130,875 +111,15 @@
<div itemprop="articleBody">
- <span class="target" id="ansible-collections-community-aws-waf-condition-module"></span><section id="community-aws-waf-condition-module-create-and-delete-waf-conditions">
-<h1>community.aws.waf_condition module – Create and delete WAF Conditions<a class="headerlink" href="#community-aws-waf-condition-module-create-and-delete-waf-conditions" title="Link to this heading"></a></h1>
+ <span class="target" id="ansible-collections-community-aws-waf-condition-module"></span><section id="community-aws-waf-condition">
+<h1>community.aws.waf_condition<a class="headerlink" href="#community-aws-waf-condition" title="Link to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
-<p>This module is part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
-<p>It is not included in <code class="docutils literal notranslate"><span class="pre">ansible-core</span></code>.
-To check whether it is installed, run <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">list</span></code>.</p>
-<p>To install it, use: <code class="code docutils literal notranslate"><span class="pre">ansible-galaxy</span> <span class="pre">collection</span> <span class="pre">install</span> <span class="pre">community.aws</span></code>.
-You need further requirements to be able to use this module,
-see <a class="reference internal" href="#ansible-collections-community-aws-waf-condition-module-requirements"><span class="std std-ref">Requirements</span></a> for details.</p>
-<p>To use it in a playbook, specify: <code class="code docutils literal notranslate"><span class="pre">community.aws.waf_condition</span></code>.</p>
+<p>This plugin was part of the <a class="reference external" href="https://galaxy.ansible.com/ui/repo/published/community/aws/">community.aws collection</a> (version 12.0.0-dev0).</p>
</div>
-<p class="ansible-version-added">New in community.aws 1.0.0</p>
-<nav class="contents local" id="contents">
-<ul class="simple">
-<li><p><a class="reference internal" href="#deprecated" id="id1">DEPRECATED</a></p></li>
-<li><p><a class="reference internal" href="#synopsis" id="id2">Synopsis</a></p></li>
-<li><p><a class="reference internal" href="#requirements" id="id3">Requirements</a></p></li>
-<li><p><a class="reference internal" href="#parameters" id="id4">Parameters</a></p></li>
-<li><p><a class="reference internal" href="#notes" id="id5">Notes</a></p></li>
-<li><p><a class="reference internal" href="#examples" id="id6">Examples</a></p></li>
-<li><p><a class="reference internal" href="#return-values" id="id7">Return Values</a></p></li>
-<li><p><a class="reference internal" href="#status" id="id8">Status</a></p></li>
-</ul>
-</nav>
-<section id="deprecated">
-<h2><a class="toc-backref" href="#id1" role="doc-backlink">DEPRECATED</a><a class="headerlink" href="#deprecated" title="Link to this heading"></a></h2>
-<dl class="field-list simple">
-<dt class="field-odd">Removed in<span class="colon">:</span></dt>
-<dd class="field-odd"><p>version 12.0.0</p>
-</dd>
-<dt class="field-even">Why<span class="colon">:</span></dt>
-<dd class="field-even"><p>Amazon has retired the “WAF Classic” service.</p>
-</dd>
-<dt class="field-odd">Alternative<span class="colon">:</span></dt>
-<dd class="field-odd"><p>Please use the “AWS WAF (WAFv2)” service and modules instead.</p>
-</dd>
-</dl>
-</section>
-<section id="synopsis">
-<h2><a class="toc-backref" href="#id2" role="doc-backlink">Synopsis</a><a class="headerlink" href="#synopsis" title="Link to this heading"></a></h2>
-<ul class="simple">
-<li><p>Read the AWS documentation for WAF <a class="reference external" href="https://aws.amazon.com/documentation/waf/">https://aws.amazon.com/documentation/waf/</a></p></li>
-<li><p>Prior to release 5.0.0 this module was called <code class="docutils literal notranslate"><span class="pre">community.aws.aws_waf_condition</span></code>. The usage did not change.</p></li>
-</ul>
-<p>Aliases: aws_waf_condition</p>
-</section>
-<section id="requirements">
-<span id="ansible-collections-community-aws-waf-condition-module-requirements"></span><h2><a class="toc-backref" href="#id3" role="doc-backlink">Requirements</a><a class="headerlink" href="#requirements" title="Link to this heading"></a></h2>
-<p>The below requirements are needed on the host that executes this module.</p>
-<ul class="simple">
-<li><p>python >= 3.6</p></li>
-<li><p>boto3 >= 1.38.0</p></li>
-<li><p>botocore >= 1.38.0</p></li>
-</ul>
-</section>
-<section id="parameters">
-<h2><a class="toc-backref" href="#id4" role="doc-backlink">Parameters</a><a class="headerlink" href="#parameters" title="Link to this heading"></a></h2>
-<table class="longtable ansible-option-table docutils align-default" style="width: 100%">
-<thead>
-<tr class="row-odd"><th class="head"><p>Parameter</p></th>
-<th class="head"><p>Comments</p></th>
-</tr>
-</thead>
-<tbody>
-<tr class="row-even"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-access_key"></div>
-<div class="ansibleOptionAnchor" id="parameter-aws_access_key_id"></div>
-<div class="ansibleOptionAnchor" id="parameter-aws_access_key"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-aws-access-key-id"><span id="ansible-collections-community-aws-waf-condition-module-parameter-aws-access-key"></span><span id="ansible-collections-community-aws-waf-condition-module-parameter-access-key"></span><strong>access_key</strong></p>
-<a class="ansibleOptionLink" href="#parameter-access_key" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: aws_access_key_id, aws_access_key</span></p>
-<p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>AWS access key ID.</p>
-<p>See the AWS documentation for more information about access tokens <a class="reference external" href="https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys">https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys</a>.</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">AWS_ACCESS_KEY_ID</span></code> or <code class="docutils literal notranslate"><span class="pre">AWS_ACCESS_KEY</span></code> environment variables may also be used in decreasing order of preference.</p>
-<p>The <em>aws_access_key</em> and <em>profile</em> options are mutually exclusive.</p>
-<p>The <em>aws_access_key_id</em> alias was added in release 5.1.0 for consistency with the AWS botocore SDK.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-aws_ca_bundle"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-aws-ca-bundle"><strong>aws_ca_bundle</strong></p>
-<a class="ansibleOptionLink" href="#parameter-aws_ca_bundle" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">path</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>The location of a CA Bundle to use when validating SSL certificates.</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">AWS_CA_BUNDLE</span></code> environment variable may also be used.</p>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-aws_config"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-aws-config"><strong>aws_config</strong></p>
-<a class="ansibleOptionLink" href="#parameter-aws_config" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>A dictionary to modify the botocore configuration.</p>
-<p>Parameters can be found in the AWS documentation <a class="reference external" href="https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html#botocore.config.Config">https://botocore.amazonaws.com/v1/documentation/api/latest/reference/config.html#botocore.config.Config</a>.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-debug_botocore_endpoint_logs"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-debug-botocore-endpoint-logs"><strong>debug_botocore_endpoint_logs</strong></p>
-<a class="ansibleOptionLink" href="#parameter-debug_botocore_endpoint_logs" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">boolean</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>Use a <code class="docutils literal notranslate"><span class="pre">botocore.endpoint</span></code> logger to parse the unique (rather than total) <code class="docutils literal notranslate"><span class="pre">"resource:action"</span></code> API calls made during a task, outputing the set to the resource_actions key in the task results. Use the <code class="docutils literal notranslate"><span class="pre">aws_resource_action</span></code> callback to output to total list made during a playbook.</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">ANSIBLE_DEBUG_BOTOCORE_LOGS</span></code> environment variable may also be used.</p>
-<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
-<ul class="simple">
-<li><p><code class="ansible-option-default-bold docutils literal notranslate"><strong><span class="pre">false</span></strong></code> <span class="ansible-option-choices-default-mark">← (default)</span></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">true</span></code></p></li>
-</ul>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-endpoint_url"></div>
-<div class="ansibleOptionAnchor" id="parameter-aws_endpoint_url"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-endpoint-url"><span id="ansible-collections-community-aws-waf-condition-module-parameter-aws-endpoint-url"></span><strong>endpoint_url</strong></p>
-<a class="ansibleOptionLink" href="#parameter-endpoint_url" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-aliases">aliases: aws_endpoint_url</span></p>
-<p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>URL to connect to instead of the default AWS endpoints. While this can be used to connection to other AWS-compatible services the amazon.aws and community.aws collections are only tested against AWS.</p>
-<p>The <code class="docutils literal notranslate"><span class="pre">AWS_URL</span></code> environment variable may also be used.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters"><strong>filters</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=dictionary</span></p>
-</div></td>
-<td><div class="ansible-option-cell"><p>A list of the filters against which to match.</p>
-<p>For <em>type=byte</em>, valid keys are <em>field_to_match</em>, <em>position</em>, <em>header</em>, <em>transformation</em> and <em>target_string</em>.</p>
-<p>For <em>type=geo</em>, the only valid key is <em>country</em>.</p>
-<p>For <em>type=ip</em>, the only valid key is <em>ip_address</em>.</p>
-<p>For <em>type=regex</em>, valid keys are <em>field_to_match</em>, <em>transformation</em> and <em>regex_pattern</em>.</p>
-<p>For <em>type=size</em>, valid keys are <em>field_to_match</em>, <em>transformation</em>, <em>comparison</em> and <em>size</em>.</p>
-<p>For <em>type=sql</em>, valid keys are <em>field_to_match</em> and <em>transformation</em>.</p>
-<p>For <em>type=xss</em>, valid keys are <em>field_to_match</em> and <em>transformation</em>.</p>
-<p>Required when <em>state=present</em>.</p>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/comparison"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-comparison"><strong>comparison</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/comparison" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>What type of comparison to perform.</p>
-<p>Only valid key when <em>type=size</em>.</p>
-<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
-<ul class="simple">
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"EQ"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"NE"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"LE"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"LT"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"GE"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"GT"</span></code></p></li>
-</ul>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/country"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-country"><strong>country</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/country" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>Value of geo constraint (typically a two letter country code).</p>
-<p>The only valid key when <em>type=geo</em>.</p>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/field_to_match"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-field-to-match"><strong>field_to_match</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/field_to_match" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The field upon which to perform the match.</p>
-<p>Valid when <em>type=byte</em>, <em>type=regex</em>, <em>type=sql</em> or <em>type=xss</em>.</p>
-<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
-<ul class="simple">
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"uri"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"query_string"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"header"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"method"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"body"</span></code></p></li>
-</ul>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/header"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-header"><strong>header</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/header" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>Which specific header should be matched.</p>
-<p>Required when <em>field_to_match=header</em>.</p>
-<p>Valid when <em>type=byte</em>.</p>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/ip_address"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-ip-address"><strong>ip_address</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/ip_address" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>An IP Address or CIDR to match.</p>
-<p>The only valid key when <em>type=ip</em>.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/position"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-position"><strong>position</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/position" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>Where in the field the match needs to occur.</p>
-<p>Only valid when <em>type=byte</em>.</p>
-<p class="ansible-option-line"><strong class="ansible-option-choices">Choices:</strong></p>
-<ul class="simple">
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"exactly"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"starts_with"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"ends_with"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"contains"</span></code></p></li>
-<li><p><code class="ansible-option-choices-entry docutils literal notranslate"><span class="pre">"contains_word"</span></code></p></li>
-</ul>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/regex_pattern"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-regex-pattern"><strong>regex_pattern</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/regex_pattern" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">dictionary</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>A dict describing the regular expressions used to perform the match.</p>
-<p>Only valid when <em>type=regex</em>.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/regex_pattern/name"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-regex-pattern-name"><strong>name</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/regex_pattern/name" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>A name to describe the set of patterns.</p>
-</div></td>
-</tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-indent"></div><div class="ansible-option-cell">
-<div class="ansibleOptionAnchor" id="parameter-filters/regex_pattern/regex_strings"></div><p class="ansible-option-title" id="ansible-collections-community-aws-waf-condition-module-parameter-filters-regex-pattern-regex-strings"><strong>regex_strings</strong></p>
-<a class="ansibleOptionLink" href="#parameter-filters/regex_pattern/regex_strings" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">list</span> / <span class="ansible-option-elements">elements=string</span></p>
-</div></td>
-<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>A list of regular expressions to match.</p>
-</div></td>
-</tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div c |
There was a problem hiding this comment.
Pull request overview
This PR enhances the ecs_service Ansible module to support AWS ECS Service Connect and adds an optional wait behavior for state=present, alongside introducing a reusable recursive “dict subset” comparison helper used to keep Service Connect idempotency tolerant of AWS-populated defaults.
Changes:
- Added
service_connect_configurationsupport toecs_service(create/update + idempotency comparison). - Extended
waitto supportstate=presentvia theservices_stablewaiter. - Introduced
is_dict_subset()inplugins/module_utils/dict.pywith comprehensive unit tests and new Service Connect integration tests/teardown.
Reviewed changes
Copilot reviewed 7 out of 8 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
plugins/modules/ecs_service.py |
Adds Service Connect parameter handling, idempotency comparison, keyword-arg calls, and present-state waiter. |
plugins/module_utils/dict.py |
New recursive subset comparator used for Service Connect idempotency tolerance. |
tests/unit/plugins/module_utils/test_dict.py |
Unit tests covering subset behavior, nested structures, lists, and Service Connect-like payloads. |
tests/unit/plugins/module_utils/__init__.py |
Ensures unit test package discovery for module_utils tests. |
tests/integration/targets/ecs_cluster/tasks/main.yml |
Wires in the new Service Connect integration test task file. |
tests/integration/targets/ecs_cluster/tasks/25_ecs_service_connect.yml |
New integration coverage for Service Connect create/idempotency/update/disable/delete. |
tests/integration/targets/ecs_cluster/tasks/99_terminate_everything.yml |
Adds teardown for Service Connect service, task definition, and Cloud Map namespace. |
tests/integration/targets/ecs_cluster/defaults/main.yml |
Adds Service Connect-specific defaults (namespace + task container port mapping). |
Comments suppressed due to low confidence (1)
plugins/modules/ecs_service.py:1263
- The failure message in the update_service exception path says "Couldn't create service" even though this branch is performing an update. Please change the message to indicate update failure to avoid confusing users during troubleshooting.
except (botocore.exceptions.BotoCoreError, botocore.exceptions.ClientError) as e:
module.fail_json_aws(e, msg="Couldn't create service")
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 3m 24s (non-voting) |
Treat missing serviceConnectConfiguration in AWS response as
{enabled: false} so that disabling Service Connect converges
idempotently. Add when guard to teardown task definition cleanup
to prevent template errors if setup failed earlier.
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 5m 17s (non-voting) |
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 5m 45s (non-voting) |
|
Need some maintainer assistance with this error: Looks like the IAM ID that ZUUL runs under needs additional permission. |
|
Also note -- the change to semantics of |
Cleaning up integration tests. Co-authored-by: Alina Buzachis <abuzachis@redhat.com>
Guard the until expression against empty stdout, which occurs when the get-operation CLI call fails on a retry attempt.
The ecs_service_info retry loop that polled for rolloutState == 'COMPLETED' was effectively dead code: - ecs_service now has a real services_stable waiter (wait: true) that covers both create and update paths, addressing concern (a). - Concern (b) remains: EC2 instances never register with the cluster due to missing VPC route table entries, so the deployment never completes and the loop always failed under ignore_errors. - All subsequent constraint/strategy update tasks already use force_new_deployment: true to bypass incomplete deployments. Removing the block saves ~50s of test runtime (10 retries x 5s delay) with no change in behavior.
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 5m 08s (non-voting) |
…dict_subset - Add type hints (Union[dict, list[dict]]) and return type to is_dict_subset - Raise ValueError when top-level arguments are not dict or list - Extract recursive logic into private _is_subset helper to preserve scalar leaf comparison during recursion - Update unit tests to expect ValueError for scalar top-level calls
|
Build failed. ❌ ansible-galaxy-importer RETRY_LIMIT Host unreachable in 7m 07s (non-voting) |
…nt runs Select the PRIMARY deployment explicitly when comparing Service Connect configuration, since ECS can return multiple deployments during rollouts and the first element is not guaranteed to be the primary one. Move the services_stable waiter outside the change-detection branch so wait=true is honored even when the service configuration already matches, allowing callers to block until a prior deployment finishes converging.
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 3m 32s (non-voting) |
|
Now waiting on security updates in mattclay/aws-terminator#330 . |
|
Build failed. ✔️ ansible-galaxy-importer SUCCESS in 3m 44s (non-voting) |
Summary
Closes #1755
service_connect_configurationparameter toecs_servicemodule for creating and updating ECS services with AWS Service Connectwaitparameter to supportstate=presentusing theservices_stablewaiter, blocking untilrunningCountmatchesdesiredCountcreate_serviceandupdate_servicecall sites to prevent silent breakage on parameter reorderingis_dict_subset()intoplugins/module_utils/dict.pyas a reusable recursive subset comparison utility with order-insensitive list matching vialist_sort_keyserviceConnectConfigurationfrom the primary deployment (where AWS returns it, not the top-level Service object) and tolerates AWS-populated defaults likediscoveryNameTest plan
is_dict_subset(36 tests covering basic subset, nested dicts, list comparison, sort key, scalars, and real-world ECS Service Connect scenarios)