Once in a while, when working with Jinja templating engine, you might need to create a random GUID with Jinja.
Here is how to do it:
{% macro random_string(len) -%}{% for i in range(0,len) -%}{{ [0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f"]|random }}{% endfor %}{%- endmacro -%}
{% macro random_guid() -%} {{ random_string(8) + "-" + random_string(4) + "-" + random_string(4) + "-" + random_string(4) + "-" + random_string(12) }}{%- endmacro -%}
{% set myGUID = random_guid() %}
Now let’s explain it line by line
{% macro random_string(len) -%}{% for i in range(0,len) -%}{{ [0,1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f"]|random }}{% endfor %}{%- endmacro -%}
I decided to go with Jinja macro as I had to create different random strings of various lengths, not necessarily aligned with the default GUID (8-4-4-4-12) format. so random_string macro accepts a len parameter, that specifies what length should the randomly generated string should be.
Note: that the random string will have only 0-9 and a-f characters and not any alphanumeric character.
Also the resulting GUID-like string is just a set of random string that look like GUID, but don’t necessary adhere to the string formats and variants described here
{% macro random_guid() -%} {{ random_string(8) + "-" + random_string(4) + "-" + random_string(4) + "-" + random_string(4) + "-" + random_string(12) }}{%- endmacro -%}
random_guid macro is actually a wrapper that calls the random_string macro with a specific value for the len parameter a number of times and creates a random string that adheres to the expected GUID format.
{% set myGUID = random_guid() %}
Here we are just calling the random_guid macro and assigning the returned value to the myGUID Jinja parameter


