Change the list of extensions to a dict

The stage-output role accepts a list of extensions to be replaced as txt
so that they can be seen directly from within a web browser.
Using a list means that children jobs cannot add to the parent setting,
only overwrite. Adding support for dicts while preserving, at least for
now, support for lists - to avoid breaking existing implementations.

Change-Id: Ifc4b2070c5844e51acb9ad5d512e9f25f5bdd7ef
This commit is contained in:
Andrea Frittoli (andreaf) 2018-01-31 20:54:05 +00:00
parent 3d02630d1b
commit 146fa7b2e6
2 changed files with 22 additions and 4 deletions

View File

@ -31,7 +31,7 @@ intended to be used before output fetching in a base job's post-playbook.
.. zuul:rolevar:: extensions_to_txt
:default: null
A list of file extensions to be replaced with .txt when staging.
A dict of file extensions to be replaced with .txt when staging.
This can be useful to ensure that text files with an extension not
registered in the web server may be viewed via browser when uploaded
to a file server.
@ -43,8 +43,9 @@ intended to be used before output fetching in a base job's post-playbook.
Example:
extensions_to_txt:
- conf
- log
conf: True
log: True
txt: False
zuul.conf --(staged as)--> zuul_conf.txt

View File

@ -4,9 +4,26 @@
with_dict: "{{ zuul_copy_output }}"
register: sources
- name: Build the replace regex
- name: Build the replace regex when the input is a list
set_fact:
extensions_regex: "{{ extensions_to_txt | join('|') | default('__do_not_replace__') }}"
when: extensions_to_txt | type_debug == 'list'
- name: Output a warning when input is a list
debug:
msg: "WARNING: extensions_to_txt is a list, values defined by parents will be overwritten"
when: extensions_to_txt | type_debug == 'list'
- name: Build a list when replace regex is a dict
set_fact:
extensions_regex: "{{ extensions_regex | default('___') }}|{{ item.key }}"
with_dict: extensions_to_txt
when:
- extensions_to_txt | type_debug == 'dict'
- item.value == True
# NOTE(andreaf) Even if this is only executed for type 'dict', with_dict is
# still invoked somehow and it's causing an error when the input is a list
ignore_errors: yes
- debug:
var: extensions_regex