Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cloudwatchlogs_log_group_metric_filter: add support for unit and dimensions #2286

Open
wants to merge 8 commits into
base: main
Choose a base branch
from

Conversation

jmisset-cb
Copy link
Contributor

SUMMARY

This PR adds support for the options unit and dimensions in the cloudwatchlogs_log_group_metric_filter module.
This enables configuring unit and dimensions in Cloudwatch Logs Metricfilters using ansible, which was previously not possible.

The addition is pretty straigthforward since both unit and dimensions are part of the metric_transformation parameter.

dimensions and default_value are mutually exclusive, however:

  1. The AWS API does not fail when both are present, instead the dimensions are simply ignored.
  2. Since they are not top-level parameters, the ansible module option mutually_exclusive was not possible. Instead a custom check was added to the module that throws an error when both parameters are present.

An integration test has been added for this case, as well as for configuring metric_filters with units and/or dimensions.

The function metricTransformationHandler has been rewritten slightly due to the addition of the two extra optional parameters, to make it a bit more readable.

Happy to get your feedback!

ISSUE TYPE
  • Feature Pull Request
COMPONENT NAME

cloudwatchlogs_log_group_metric_filter

ADDITIONAL INFORMATION

Copy link

github-actions bot commented Sep 6, 2024

Docs Build 📝

Thank you for contribution!✨

The docsite for this PR is available for download as an artifact from this run:
https://github.com/ansible-collections/amazon.aws/actions/runs/11210298967

You can compare to the docs for the main branch here:
https://ansible-collections.github.io/amazon.aws/branch/main

File changes:

  • M collections/amazon/aws/cloudwatchlogs_log_group_metric_filter_module.html
Click to see the diff comparison.

NOTE: only file modifications are shown here. New and deleted files are excluded.
See the file list and check the published docs to see those files.

diff --git a/home/runner/work/amazon.aws/amazon.aws/docsbuild/base/collections/amazon/aws/cloudwatchlogs_log_group_metric_filter_module.html b/home/runner/work/amazon.aws/amazon.aws/docsbuild/head/collections/amazon/aws/cloudwatchlogs_log_group_metric_filter_module.html
index 710f828..e2bd80b 100644
--- a/home/runner/work/amazon.aws/amazon.aws/docsbuild/base/collections/amazon/aws/cloudwatchlogs_log_group_metric_filter_module.html
+++ b/home/runner/work/amazon.aws/amazon.aws/docsbuild/head/collections/amazon/aws/cloudwatchlogs_log_group_metric_filter_module.html
@@ -279,29 +279,50 @@ see <a class="reference internal" href="#ansible-collections-amazon-aws-cloudwat
 <a class="ansibleOptionLink" href="#parameter-metric_transformation/default_value" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">float</span></p>
 </div></td>
 <td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The value to emit when a filter pattern does not match a log event.</p>
+<p>The <em>default_value</em> and <em>dimensions</em> options are mutually exclusive.</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-metric_transformation/dimensions"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-metric-transformation-dimensions"><strong>dimensions</strong></p>
+<a class="ansibleOptionLink" href="#parameter-metric_transformation/dimensions" 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 amazon.aws 8.3.0</em></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>A dimension is a name/value pair that is a part of the identity of a metric.</p>
+<p>You can assign up to 3 dimensions to a metric.</p>
+<p>Dimensions are only supported for JSON or space-delimited metric filters.</p>
+<p>The <em>default_value</em> and <em>dimensions</em> options are mutually exclusive.</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-metric_transformation/metric_name"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-metric-transformation-metric-name"><strong>metric_name</strong></p>
 <a class="ansibleOptionLink" href="#parameter-metric_transformation/metric_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-cell"><p>The name of the cloudWatch metric.</p>
 </div></td>
 </tr>
-<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
 <div class="ansibleOptionAnchor" id="parameter-metric_transformation/metric_namespace"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-metric-transformation-metric-namespace"><strong>metric_namespace</strong></p>
 <a class="ansibleOptionLink" href="#parameter-metric_transformation/metric_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 of the cloudWatch metric.</p>
 </div></td>
 </tr>
-<tr class="row-even"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
+<tr class="row-odd"><td><div class="ansible-option-indent"></div><div class="ansible-option-cell">
 <div class="ansibleOptionAnchor" id="parameter-metric_transformation/metric_value"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-metric-transformation-metric-value"><strong>metric_value</strong></p>
 <a class="ansibleOptionLink" href="#parameter-metric_transformation/metric_value" 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 value to publish to the cloudWatch metric when a filter pattern matches a log event.</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-metric_transformation/unit"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-metric-transformation-unit"><strong>unit</strong></p>
+<a class="ansibleOptionLink" href="#parameter-metric_transformation/unit" title="Permalink to this option"></a><p class="ansible-option-type-line"><span class="ansible-option-type">string</span></p>
+<p><em class="ansible-option-versionadded">added in amazon.aws 8.3.0</em></p>
+</div></td>
+<td><div class="ansible-option-indent-desc"></div><div class="ansible-option-cell"><p>The unit of the value.</p>
+<p>The various options are available `here &lt;<a class="reference external" href="https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html">https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html</a>&gt;`.</p>
+</div></td>
+</tr>
 <tr class="row-odd"><td><div class="ansible-option-cell">
 <div class="ansibleOptionAnchor" id="parameter-profile"></div>
 <div class="ansibleOptionAnchor" id="parameter-aws_profile"></div><p class="ansible-option-title" id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-profile"><span id="ansible-collections-amazon-aws-cloudwatchlogs-log-group-metric-filter-module-parameter-aws-profile"></span><strong>profile</strong></p>
@@ -414,12 +435,26 @@ see <a class="reference internal" href="#ansible-collections-amazon-aws-cloudwat
 <span class="w">      </span><span class="nt">metric_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">box_free_space</span>
 <span class="w">      </span><span class="nt">metric_namespace</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fluentd_metrics</span>
 <span class="w">      </span><span class="nt">metric_value</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;$.value&quot;</span>
+<span class="w">      </span><span class="nt">unit</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">Bytes</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">delete metric filter on log group /fluentd/testcase</span>
 <span class="w">  </span><span class="nt">amazon.aws.cloudwatchlogs_log_group_metric_filter</span><span class="p">:</span>
 <span class="w">    </span><span class="nt">log_group_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/fluentd/testcase</span>
 <span class="w">    </span><span class="nt">filter_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">BoxFreeStorage</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">absent</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">set metric filter on log group /fluentd/testcase with dimensions</span>
+<span class="w">  </span><span class="nt">amazon.aws.cloudwatchlogs_log_group_metric_filter</span><span class="p">:</span>
+<span class="w">    </span><span class="nt">log_group_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/fluentd/testcase</span>
+<span class="w">    </span><span class="nt">filter_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">BoxFreeStorage</span>
+<span class="w">    </span><span class="nt">filter_pattern</span><span class="p">:</span><span class="w"> </span><span class="s">&#39;{($.value</span><span class="nv"> </span><span class="s">=</span><span class="nv"> </span><span class="s">*)</span><span class="nv"> </span><span class="s">&amp;&amp;</span><span class="nv"> </span><span class="s">($.hostname</span><span class="nv"> </span><span class="s">=</span><span class="nv"> </span><span class="s">*)}&#39;</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">metric_transformation</span><span class="p">:</span>
+<span class="w">      </span><span class="nt">metric_name</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">box_free_space</span>
+<span class="w">      </span><span class="nt">metric_namespace</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">fluentd_metrics</span>
+<span class="w">      </span><span class="nt">metric_value</span><span class="p">:</span><span class="w"> </span><span class="s">&quot;$.value&quot;</span>
+<span class="w">      </span><span class="nt">dimensions</span><span class="p">:</span>
+<span class="w">        </span><span class="nt">hostname</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">$.hostname</span>
 </pre></div>
 </div>
 </section>
@@ -439,7 +474,7 @@ see <a class="reference internal" href="#ansible-collections-amazon-aws-cloudwat
 </div></td>
 <td><div class="ansible-option-cell"><p>Return the origin response value.</p>
 <p class="ansible-option-line"><strong class="ansible-option-returned-bold">Returned:</strong> success</p>
-<p class="ansible-option-line ansible-option-sample"><strong class="ansible-option-sample-bold">Sample:</strong> <code class="ansible-option-sample docutils literal notranslate"><span class="pre">[{&quot;default_value&quot;:</span> <span class="pre">3.1415,</span> <span class="pre">&quot;metric_name&quot;:</span> <span class="pre">&quot;box_free_space&quot;,</span> <span class="pre">&quot;metric_namespace&quot;:</span> <span class="pre">&quot;made_with_ansible&quot;,</span> <span class="pre">&quot;metric_value&quot;:</span> <span class="pre">&quot;$.value&quot;}]</span></code></p>
+<p class="ansible-option-line ansible-option-sample"><strong class="ansible-option-sample-bold">Sample:</strong> <code class="ansible-option-sample docutils literal notranslate"><span class="pre">[{&quot;default_value&quot;:</span> <span class="pre">3.1415,</span> <span class="pre">&quot;dimensions&quot;:</span> <span class="pre">{&quot;hostname&quot;:</span> <span class="pre">&quot;$.hostname&quot;},</span> <span class="pre">&quot;metric_name&quot;:</span> <span class="pre">&quot;box_free_space&quot;,</span> <span class="pre">&quot;metric_namespace&quot;:</span> <span class="pre">&quot;made_with_ansible&quot;,</span> <span class="pre">&quot;metric_value&quot;:</span> <span class="pre">&quot;$.value&quot;,</span> <span class="pre">&quot;unit&quot;:</span> <span class="pre">&quot;Bytes&quot;}]</span></code></p>
 </div></td>
 </tr>
 </tbody>

Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/cb34eda3496e441daefda3a79324a6e1

✔️ ansible-galaxy-importer SUCCESS in 3m 49s
✔️ build-ansible-collection SUCCESS in 10m 31s
✔️ ansible-test-splitter SUCCESS in 4m 20s
✔️ integration-amazon.aws-1 SUCCESS in 6m 38s
Skipped 43 jobs

Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/d11025a52359410b8471894bf4fc6a03

✔️ ansible-galaxy-importer SUCCESS in 3m 29s
✔️ build-ansible-collection SUCCESS in 10m 51s
✔️ ansible-test-splitter SUCCESS in 4m 25s
✔️ integration-amazon.aws-1 SUCCESS in 7m 52s
Skipped 43 jobs

Copy link
Contributor

@GomathiselviS GomathiselviS left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for working on this PR. Please update the Return block of the module documentation with the new parameters.

Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/93a01376ee924b60bfee2b2f40a68765

✔️ ansible-galaxy-importer SUCCESS in 4m 26s
✔️ build-ansible-collection SUCCESS in 10m 40s
✔️ ansible-test-splitter SUCCESS in 4m 22s
✔️ integration-amazon.aws-1 SUCCESS in 8m 47s
Skipped 43 jobs

Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/0da9c9d56da44db2b0f3e8bfe19969a7

✔️ ansible-galaxy-importer SUCCESS in 4m 41s
✔️ build-ansible-collection SUCCESS in 10m 42s
✔️ ansible-test-splitter SUCCESS in 4m 23s
✔️ integration-amazon.aws-1 SUCCESS in 9m 42s
Skipped 43 jobs

@alinabuzachis alinabuzachis added the backport-8 PR should be backported to the stable-8 branch label Sep 12, 2024
Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/d9f5b6cdc81943da93128ba4674874bb

✔️ ansible-galaxy-importer SUCCESS in 5m 24s
✔️ build-ansible-collection SUCCESS in 10m 35s
✔️ ansible-test-splitter SUCCESS in 4m 51s
✔️ integration-amazon.aws-1 SUCCESS in 6m 50s
Skipped 43 jobs

@alinabuzachis
Copy link
Contributor

@jmisset-cb Can you please rebase this branch?

@jmisset-cb jmisset-cb force-pushed the log_group_metric_filter_add_unit_and_dimensions branch from abc75bc to 8f52905 Compare October 7, 2024 07:01
@jmisset-cb
Copy link
Contributor Author

@jmisset-cb Can you please rebase this branch?

@alinabuzachis Done!

Copy link
Contributor

Build succeeded.
https://ansible.softwarefactory-project.io/zuul/buildset/37d270a5f01440cf85cebc7ed7f4e244

✔️ ansible-galaxy-importer SUCCESS in 4m 11s
✔️ build-ansible-collection SUCCESS in 10m 31s
✔️ ansible-test-splitter SUCCESS in 4m 15s
✔️ integration-amazon.aws-1 SUCCESS in 7m 05s
Skipped 43 jobs

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
backport-8 PR should be backported to the stable-8 branch
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants