Skip to content

Commit

Permalink
Inject serverless_operator in track templates (#1787)
Browse files Browse the repository at this point in the history
This commit introduces additional global variable `serverless_operator`.
The variable holds `true` if Rally detects serverless cluster with
operator privileges, and `false` otherwise.
  • Loading branch information
gbanasiak authored Oct 3, 2023
1 parent a230317 commit b18e0b4
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 10 deletions.
1 change: 1 addition & 0 deletions docs/advanced.rst
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ Assuming we pass ``--track-params="es_snapshot_restore_recovery_max_bytes_per_se
The parameter ``default_value`` controls the value to use for the setting if it is undefined. If the setting is undefined and there is no default value, nothing will be added.

* ``build_flavor``: a global variable that holds build flavor reported by Elasticsearch cluster targetted by Rally.
* ``serverless_operator``: a global variable that holds ``true`` when Rally targets serverless cluster with operator privileges, and ``false`` otherwise.

.. _adding_tracks_custom_param_sources:

Expand Down
10 changes: 9 additions & 1 deletion docs/migrate.rst
Original file line number Diff line number Diff line change
@@ -1,14 +1,22 @@
Migration Guide
===============

Migrating to Rally 2.10.0
-------------------------

``serverless_operator`` becomes a global variable in track templates
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Rally now treats ``serverless_operator`` as a :ref:`global variable<advanced_extensions>` in Jinja2 templates. The variable equals ``true`` if Rally targets serverless cluster with operator privileges, and ``false`` otherwise. The ``serverless_operator`` becomes a reserved name so user-supplied track parameters must be named differently. Rename your track parameters before upgrading if needed.

Migrating to Rally 2.9.0
------------------------

``build_flavor`` becomes a global variable in track templates
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Rally now treats ``build_flavor`` as a :ref:`global variable<advanced_extensions>` in Jinja2 templates. The value of the variable depends on the build flavor reported by Elasticsearch cluster targetted by Rally.
The ``build_flavor`` becomes a reserved name so user-supplied track parameters must be named differently. Rename your track parameters before upgrade if needed.
The ``build_flavor`` becomes a reserved name so user-supplied track parameters must be named differently. Rename your track parameters before upgrading if needed.

Example error when running with ``--track-params="build_flavor:test"``::

Expand Down
30 changes: 24 additions & 6 deletions esrally/track/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -743,13 +743,14 @@ def read_glob_files(self, pattern):
return ",\n".join(source)


def default_internal_template_vars(glob_helper=lambda f: [], clock=time.Clock, build_flavor=None):
def default_internal_template_vars(glob_helper=lambda f: [], clock=time.Clock, build_flavor=None, serverless_operator=None):
"""
Dict of internal global variables used by our jinja2 renderers
"""
return {
"globals": {
"build_flavor": build_flavor,
"serverless_operator": serverless_operator,
"now": clock.now(),
"glob": glob_helper,
},
Expand Down Expand Up @@ -817,7 +818,7 @@ def register_all_params_in_track(assembled_source, complete_track_params=None):
complete_track_params.populate_track_defined_params(j2_variables)


def render_template_from_file(template_file_name, template_vars, complete_track_params=None, build_flavor=None):
def render_template_from_file(template_file_name, template_vars, complete_track_params=None, build_flavor=None, serverless_operator=None):
def relative_glob(start, f):
result = glob.glob(os.path.join(start, f))
if result:
Expand All @@ -834,7 +835,9 @@ def relative_glob(start, f):
loader=jinja2.FileSystemLoader(base_path),
template_source=template_source.assembled_source,
template_vars=template_vars,
template_internal_vars=default_internal_template_vars(glob_helper=lambda f: relative_glob(base_path, f), build_flavor=build_flavor),
template_internal_vars=default_internal_template_vars(
glob_helper=lambda f: relative_glob(base_path, f), build_flavor=build_flavor, serverless_operator=serverless_operator
),
)


Expand Down Expand Up @@ -1059,13 +1062,15 @@ def __init__(self, cfg):
with open(track_schema_file, encoding="utf-8") as f:
self.track_schema = json.loads(f.read())
self.build_flavor = cfg.opts("mechanic", "distribution.flavor", default_value="default", mandatory=False)
self.serverless_operator = cfg.opts("driver", "serverless.operator", default_value=False, mandatory=False)
self.track_params = cfg.opts("track", "params", mandatory=False)
self.complete_track_params = CompleteTrackParams(user_specified_track_params=self.track_params)
self.read_track = TrackSpecificationReader(
track_params=self.track_params,
complete_track_params=self.complete_track_params,
selected_challenge=cfg.opts("track", "challenge.name", mandatory=False),
build_flavor=self.build_flavor,
serverless_operator=self.serverless_operator,
)
self.logger = logging.getLogger(__name__)

Expand All @@ -1085,7 +1090,11 @@ def read(self, track_name, track_spec_file, mapping_dir):
with tempfile.NamedTemporaryFile(delete=False, suffix=".json") as tmp:
try:
rendered = render_template_from_file(
track_spec_file, self.track_params, complete_track_params=self.complete_track_params, build_flavor=self.build_flavor
track_spec_file,
self.track_params,
complete_track_params=self.complete_track_params,
build_flavor=self.build_flavor,
serverless_operator=self.serverless_operator,
)
with open(tmp.name, "w", encoding="utf-8") as f:
f.write(rendered)
Expand Down Expand Up @@ -1237,10 +1246,19 @@ class TrackSpecificationReader:
Creates a track instances based on its parsed JSON description.
"""

def __init__(self, track_params=None, complete_track_params=None, selected_challenge=None, source=io.FileSource, build_flavor=None):
def __init__(
self,
track_params=None,
complete_track_params=None,
selected_challenge=None,
source=io.FileSource,
build_flavor=None,
serverless_operator=None,
):
self.name = None
self.base_path = None
self.build_flavor = build_flavor
self.serverless_operator = serverless_operator
self.track_params = track_params if track_params else {}
self.complete_track_params = complete_track_params
self.selected_challenge = selected_challenge
Expand Down Expand Up @@ -1371,7 +1389,7 @@ def _load_template(self, contents, description):
rendered = render_template(
template_source=contents,
template_vars=self.track_params,
template_internal_vars={"globals": {"build_flavor": self.build_flavor}},
template_internal_vars={"globals": {"build_flavor": self.build_flavor, "serverless_operator": self.serverless_operator}},
)
return json.loads(rendered)
except Exception as e:
Expand Down
12 changes: 9 additions & 3 deletions tests/track/loader_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -956,14 +956,17 @@ def assert_equal_ignore_whitespace(expected, actual):


class TestTemplateRender:
unittest_template_internal_vars = loader.default_internal_template_vars(clock=StaticClock, build_flavor="test")
unittest_template_internal_vars = loader.default_internal_template_vars(
clock=StaticClock, build_flavor="test", serverless_operator=False
)

def test_render_simple_template(self):
template = """
{
"key": {{'01-01-2000' | days_ago(now)}},
"key2": "static value",
"key3": "{{build_flavor}}"
"key3": "{{build_flavor}}",
"key4": {{serverless_operator}}
}
"""

Expand All @@ -973,7 +976,8 @@ def test_render_simple_template(self):
{
"key": 5864,
"key2": "static value",
"key3": "test"
"key3": "test",
"key4": False
}
"""
assert rendered == expected
Expand Down Expand Up @@ -1071,6 +1075,8 @@ def test_render_template_with_conditions(self):
{
{%- if build_flavor != "test" %}
"key1": "build_flavor"
{%- elif serverless_operator %}
"key1": "serverless_operator"
{%- elif lifecycle == "ilm" %}
"key1": "ilm"
{%- else %}
Expand Down

0 comments on commit b18e0b4

Please sign in to comment.