diff --git a/roles/emit-ara-html/README.rst b/roles/emit-ara-html/README.rst
index 83a389e66..a3a986232 100644
--- a/roles/emit-ara-html/README.rst
+++ b/roles/emit-ara-html/README.rst
@@ -5,6 +5,12 @@ Have ARA generate html logs if ARA and ARA data are both present.
.. zuul:rolevar:: ara_generate_html
Whether to generate a static ARA HTML report or not.
+ Possible values:
+
+ - ``true`` (always generate a report)
+ - ``false`` (never generate a report)
+ - ``failure`` (only generate a report on failure)
+
Defaults to ``true``.
.. zuul:rolevar:: ara_compress_html
diff --git a/roles/emit-ara-html/defaults/main.yaml b/roles/emit-ara-html/defaults/main.yaml
index 7fd6f4fe7..334b8c6b4 100644
--- a/roles/emit-ara-html/defaults/main.yaml
+++ b/roles/emit-ara-html/defaults/main.yaml
@@ -1,4 +1,8 @@
# Whether to generate a static ARA HTML report or not
+# Possible values:
+# - true (always)
+# - false (never)
+# - 'failure' (only on failure)
ara_generate_html: true
# Whether to compress the ARA HTML output or not
diff --git a/roles/emit-ara-html/tasks/main.yaml b/roles/emit-ara-html/tasks/main.yaml
index 6a31393f8..75909e64b 100644
--- a/roles/emit-ara-html/tasks/main.yaml
+++ b/roles/emit-ara-html/tasks/main.yaml
@@ -17,15 +17,21 @@
register: ara_command_type
when: ara_db_stat.stat.exists
-- name: Generate ARA html output
- command: "ara generate html {{ zuul.executor.log_root }}/ara"
- ignore_errors: yes
- when:
+- when:
- ara_command_type | succeeded
- not ara_command_type | skipped
- - ara_generate_html | bool
+ block:
+ # Always generate (true), never (false) or only on failure ('failure')
+ # Additionally cover for edge cases where zuul_success might be undefined
+ - name: Generate ARA html output
+ command: "ara generate html {{ zuul.executor.log_root }}/ara"
+ ignore_errors: yes
+ when: ara_generate_html | bool or
+ (ara_generate_html == 'failure' and not zuul_success | default(false) | bool)
+ register: ara_generated
-- name: Compress ARA html output
- command: gzip --recursive --best {{ zuul.executor.log_root }}/ara
- ignore_errors: yes
- when: ara_compress_html | bool
\ No newline at end of file
+ - name: Compress ARA html output
+ command: gzip --recursive --best {{ zuul.executor.log_root }}/ara
+ ignore_errors: yes
+ when:
+ - not ara_generated | skipped