public inbox for kdevops@lists.linux.dev
 help / color / mirror / Atom feed
From: Luis Chamberlain <mcgrof@kernel.org>
To: Chuck Lever <cel@kernel.org>, Daniel Gomez <da.gomez@kruces.com>,
	kdevops@lists.linux.dev
Cc: hui81.qi@samsung.com, kundan.kumar@samsung.com,
	Luis Chamberlain <mcgrof@kernel.org>
Subject: [PATCH v4 1/3] gen_hosts: use kdevops_workflow_name directly for template selection
Date: Wed,  3 Sep 2025 17:15:17 -0700	[thread overview]
Message-ID: <20250904001521.1897970-2-mcgrof@kernel.org> (raw)
In-Reply-To: <20250904001521.1897970-1-mcgrof@kernel.org>

The hosts.j2 template had become unwieldy with 40+ lines of conditional
logic to select which workflow template to include. Since kdevops already
defines KDEVOPS_WORKFLOW_NAME in Kconfig that's always set (either to the
workflow name or "mix" for non-dedicated), we can eliminate ALL conditional
logic.

The entire hosts.j2 is now just:
  {% include 'workflows/' + kdevops_workflow_name + '.j2' %}

This massive simplification:
- Reduces hosts.j2 from 40+ lines to just 1 line of logic
- Removes ALL conditional template selection from gen_hosts playbook
- Eliminates ALL workflow-specific template overrides from Makefiles
- Makes adding new workflows trivial - just define KDEVOPS_WORKFLOW_NAME

Additional changes:
- Split monolithic hosts.j2 into per-workflow templates under workflows/
- Rename default.j2 to mix.j2 to match non-dedicated workflow name
- Add missing 'cxl' to KDEVOPS_WORKFLOW_NAME in main Kconfig
- Add KDEVOPS_WORKFLOW_NAME to reboot-limit demo workflow

Generated-by: Claude AI
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
---
 kconfigs/workflows/Kconfig                    |   9 +
 playbooks/roles/gen_hosts/tasks/main.yml      | 293 ++----------------
 playbooks/roles/gen_hosts/templates/hosts.j2  | 240 +-------------
 .../roles/gen_hosts/templates/workflows/ai.j2 |  99 ++++++
 .../gen_hosts/templates/workflows/blktests.j2 |  58 ++++
 .../gen_hosts/templates/workflows/cxl.j2      |   7 +
 .../templates/workflows/fio-tests.j2          |  38 +++
 .../gen_hosts/templates/workflows/fstests.j2  |  72 +++++
 .../gen_hosts/templates/workflows/gitr.j2     |  41 +++
 .../gen_hosts/templates/workflows/linux.j2    | 110 +++++++
 .../gen_hosts/templates/workflows/ltp.j2      |  41 +++
 .../gen_hosts/templates/workflows/mix.j2      |  62 ++++
 .../gen_hosts/templates/workflows/mmtests.j2  |  77 +++++
 .../gen_hosts/templates/workflows/nfstest.j2  |  41 +++
 .../gen_hosts/templates/workflows/pynfs.j2    |   7 +
 .../templates/workflows/reboot-limit.j2       |  33 ++
 .../templates/workflows/selftests.j2          |  53 ++++
 .../gen_hosts/templates/workflows/sysbench.j2 |  53 ++++
 workflows/ai/Makefile                         |   3 -
 workflows/blktests/Makefile                   |   3 -
 workflows/cxl/Makefile                        |   2 -
 workflows/demos/reboot-limit/Kconfig          |   5 +
 workflows/fio-tests/Makefile                  |   3 -
 workflows/fstests/Makefile                    |   3 -
 workflows/gitr/Makefile                       |   3 -
 workflows/linux/Makefile                      |   1 -
 workflows/ltp/Makefile                        |   3 -
 workflows/mmtests/Makefile                    |   3 -
 workflows/nfstest/Makefile                    |   3 -
 workflows/pynfs/Makefile                      |   3 -
 workflows/selftests/Makefile                  |   3 -
 workflows/sysbench/Makefile                   |   3 -
 32 files changed, 841 insertions(+), 534 deletions(-)
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/ai.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/blktests.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/cxl.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/fio-tests.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/fstests.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/gitr.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/linux.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/ltp.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/mix.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/mmtests.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/nfstest.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/pynfs.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/reboot-limit.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/selftests.j2
 create mode 100644 playbooks/roles/gen_hosts/templates/workflows/sysbench.j2

diff --git a/kconfigs/workflows/Kconfig b/kconfigs/workflows/Kconfig
index 70898a1a..de279b48 100644
--- a/kconfigs/workflows/Kconfig
+++ b/kconfigs/workflows/Kconfig
@@ -228,6 +228,7 @@ config KDEVOPS_WORKFLOW_NAME
 	output yaml
 	default "fstests" if KDEVOPS_WORKFLOW_DEDICATE_FSTESTS
 	default "blktests" if KDEVOPS_WORKFLOW_DEDICATE_BLKTESTS
+	default "cxl" if KDEVOPS_WORKFLOW_DEDICATE_CXL
 	default "pynfs" if KDEVOPS_WORKFLOW_DEDICATE_PYNFS
 	default "selftests" if KDEVOPS_WORKFLOW_DEDICATE_SELFTESTS
 	default "gitr" if KDEVOPS_WORKFLOW_DEDICATE_GITR
@@ -514,4 +515,12 @@ endif # WORKFLOWS_LINUX_TESTS
 
 endif # WORKFLOWS_TESTS
 
+# For Linux custom workflow without tests, still need workflow name for templating
+if WORKFLOW_LINUX_CUSTOM && !WORKFLOWS_TESTS
+config KDEVOPS_WORKFLOW_NAME
+	string
+	output yaml
+	default "linux"
+endif
+
 endif # WORKFLOWS
diff --git a/playbooks/roles/gen_hosts/tasks/main.yml b/playbooks/roles/gen_hosts/tasks/main.yml
index fb63629a..518064ed 100644
--- a/playbooks/roles/gen_hosts/tasks/main.yml
+++ b/playbooks/roles/gen_hosts/tasks/main.yml
@@ -56,180 +56,22 @@
   when:
     - is_fstests|bool
 
-- name: Generate the Ansible hosts file for a Linux kernel build
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - bootlinux_builder
-    - ansible_hosts_template.stat.exists
-
-- name: Generate the Ansible inventory file
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - not kdevops_workflows_dedicated_workflow
-    - ansible_hosts_template.stat.exists
-    - not kdevops_enable_nixos|default(false)|bool
-
-- name: Generate the Ansible inventory file for NixOS
-  tags: ['hosts']
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: True
-    lstrip_blocks: True
-  when:
-    - not kdevops_workflows_dedicated_workflow
-    - ansible_hosts_template.stat.exists
-    - kdevops_enable_nixos|default(false)|bool
-
-- name: Update Ansible inventory access modification time so make sees it updated
-  ansible.builtin.file:
-    path: "{{ ansible_cfg_inventory }}"
-    state: touch
-    mode: "0755"
-
-- name: Generate the Ansible inventory file for dedicated cxl work
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ anisble_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_cxl
-    - ansible_hosts_template.stat.exists
-
-- name: Generate the Ansible inventory file for dedicated pynfs work
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_pynfs
-    - ansible_hosts_template.stat.exists
-
-- name: Generate the Ansible inventory file for dedicated gitr workflow
-  tags: ["hosts"]
-  vars:
-    gitr_enabled_hosts: "{{ gitr_enabled_test_groups | ansible.builtin.split }}"
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_gitr
-    - ansible_hosts_template.stat.exists
-
-- name: Generate an Ansible inventory file for a dedicated ltp workflow
+- name: Infer enabled fstests test section types
   tags: ["hosts"]
-  vars:
-    ltp_enabled_hosts: "{{ ltp_enabled_test_groups | ansible.builtin.split }}"
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ltp
-    - ansible_hosts_template.stat.exists
-
-- name: Generate the Ansible inventory file for dedicated nfstest workflow
-  tags: ["hosts"]
-  vars:
-    nfstest_enabled_hosts: "{{ nfstest_enabled_test_groups | ansible.builtin.split }}"
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_nfstest
-    - ansible_hosts_template.stat.exists
-
-- name: Set empty enabled test types list for fstests
-  tags: ["hosts"]
-  ansible.builtin.set_fact:
-    fstests_enabled_test_types: []
-  when:
-    - is_fstests
-    - ansible_hosts_template.stat.exists
-
-- name: Check which fstests test types are enabled
-  register: fstests_enabled_test_types_reg
   vars:
     fs: "{{ fstests_fstyp | upper }}"
-    config_val: "{{ 'CONFIG_FSTESTS_' + fs + '_SECTION_' }}"
-    fs_config_data: "{{ lookup('file', fs_config_path) }}"
-    sections_without_default: "{{ fs_config_data | regex_replace('\\[default\\]', multiline=True) }}"
-    sections_without_default_and_nfsd: "{{ sections_without_default | regex_replace('\\[nfsd\\]', multiline=True) }}"
-    sections_lines: "{{ sections_without_default_and_nfsd | regex_findall('^\\[(.*)', multiline=True) }}"
-    clean_section_lines: "{{ sections_lines | regex_replace('\\[') | regex_replace('\\]') }}"
-    clean_section_lines_without_fsname: "{{ clean_section_lines | regex_replace(fstests_fstyp + '_') }}"
-    config_sections_targets: "{{ clean_section_lines_without_fsname | replace(\"'\", '') | split(', ') }}"
-  ansible.builtin.lineinfile:
-    path: "{{ topdir_path }}/.config"
-    regexp: "^({{ config_val + item.upper() }})=y"
-    line: ""
-  check_mode: true
-  with_items: "{{ config_sections_targets }}"
-  loop_control:
-    label: "Checking for {{ config_val + item.upper() }}"
-  when:
-    - is_fstests
-    - ansible_hosts_template.stat.exists
-
-- name: Now expand the list of enabled fstests for valid configuration sections
-  tags: ["hosts"]
+    config_prefix: "{{ 'CONFIG_FSTESTS_' + fs + '_SECTION_' }}"
   ansible.builtin.set_fact:
-    fstests_enabled_test_types: "{{ fstests_enabled_test_types + [fstests_fstyp + '-' + item.item | regex_replace('_', '-')] }}"
-  with_items: "{{ fstests_enabled_test_types_reg.results }}"
-  loop_control:
-    label: "Checking for {{ item.item }} "
-  when:
-    - is_fstests
-    - ansible_hosts_template.stat.exists
-    - item.changed
-
-- name: Generate the Ansible inventory file for a dedicated fstests setup
-  tags: ["hosts"]
-  vars:
-    fs_config_data: "{{ lookup('file', fs_config_path) }}"
-    sections_without_default: "{{ fs_config_data | regex_replace('\\[default\\]', multiline=True) }}"
-    sections_lines: "{{ sections_without_default | regex_findall('^\\[(.*)', multiline=True) }}"
-    clean_section_lines: "{{ sections_lines | regex_replace('\\[') | regex_replace('\\]') }}"
-    sections_replace_underscore: "{{ clean_section_lines | replace('_', '-') }}"
-    sections: "{{ sections_replace_underscore | replace(\"'\", '') | split(', ') }}"
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
+    fstests_enabled_test_types: >-
+      {{
+        lookup('file', topdir_path + '/.config')
+        | regex_findall('^' + config_prefix + '(.*)=y$', multiline=True)
+        | reject('match', '.*_ENABLED$')
+        | map('lower')
+        | map('regex_replace', '_', '-')
+        | map('regex_replace', '^', fstests_fstyp + '-')
+        | list
+      }}
   when:
     - is_fstests
     - ansible_hosts_template.stat.exists
@@ -257,19 +99,6 @@
     - kdevops_workflow_enable_blktests
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible inventory file for a dedicated blktests setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_blktests
-    - ansible_hosts_template.stat.exists
-
 - name: Infer enabled selftests test section types
   ansible.builtin.set_fact:
     selftests_enabled_test_types: >-
@@ -284,19 +113,6 @@
     - kdevops_workflow_enable_selftests
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible inventory file for a dedicated selftests setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_selftests
-    - ansible_hosts_template.stat.exists
-
 - name: Collect dynamically supported filesystems
   vars:
     supported_filesystems_variables: "{{ hostvars[inventory_hostname] | dict2items | selectattr('key', 'search', '^sysbench_supported_filesystem_') }}"
@@ -326,36 +142,6 @@
     - kdevops_workflows_dedicated_workflow
     - kdevops_workflow_enable_sysbench
 
-- name: Generate the Ansible inventory file for a dedicated sysbench setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_sysbench
-    - ansible_hosts_template.stat.exists
-
-
-- name: Generate the Ansible hosts file for a dedicated fio-tests setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-    mode: "0644"
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_fio_tests
-    - ansible_hosts_template.stat.exists
-    - not kdevops_enable_nixos|default(false)|bool
-
-
 - name: Infer enabled mmtests test types
   ansible.builtin.set_fact:
     mmtests_enabled_test_types: >-
@@ -370,32 +156,6 @@
     - kdevops_workflow_enable_mmtests
     - ansible_hosts_template.stat.exists
 
-- name: Generate the Ansible hosts file for a dedicated mmtests setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_mmtests
-    - ansible_hosts_template.stat.exists
-
-- name: Generate the Ansible hosts file for a dedicated reboot-limit setup
-  tags: ["hosts"]
-  ansible.builtin.template:
-    src: "{{ kdevops_hosts_template }}"
-    dest: "{{ ansible_cfg_inventory }}"
-    force: true
-    trim_blocks: true
-    lstrip_blocks: true
-  when:
-    - kdevops_workflows_dedicated_workflow
-    - workflows_reboot_limit
-    - ansible_hosts_template.stat.exists
-
 - name: Load AI nodes configuration for multi-filesystem setup
   include_vars:
     file: "{{ topdir_path }}/{{ kdevops_nodes }}"
@@ -415,20 +175,35 @@
     - ai_enable_multifs_testing|default(false)|bool
     - guestfs_nodes is defined
 
-- name: Generate the Ansible hosts file for a dedicated AI setup
-  tags: ['hosts']
+- name: Generate the Ansible inventory file
+  tags: ["hosts"]
+  vars:
+    # Variables for specific workflows
+    gitr_enabled_hosts: "{{ gitr_enabled_test_groups | ansible.builtin.split if kdevops_workflow_enable_gitr else [] }}"
+    ltp_enabled_hosts: "{{ ltp_enabled_test_groups | ansible.builtin.split if kdevops_workflow_enable_ltp else [] }}"
+    nfstest_enabled_hosts: "{{ nfstest_enabled_test_groups | ansible.builtin.split if kdevops_workflow_enable_nfstest else [] }}"
+    # Variables for fstests
+    fs_config_data: "{{ lookup('file', fs_config_path) if is_fstests else '' }}"
+    sections_without_default: "{{ fs_config_data | regex_replace('\\[default\\]', multiline=True) if is_fstests else '' }}"
+    sections_lines: "{{ sections_without_default | regex_findall('^\\[(.*)', multiline=True) if is_fstests else [] }}"
+    clean_section_lines: "{{ sections_lines | regex_replace('\\[') | regex_replace('\\]') if is_fstests else [] }}"
+    sections_replace_underscore: "{{ clean_section_lines | replace('_', '-') if is_fstests else [] }}"
+    sections: "{{ sections_replace_underscore | replace(\"'\", '') | split(', ') if is_fstests else [] }}"
   ansible.builtin.template:
     src: "{{ kdevops_hosts_template }}"
     dest: "{{ ansible_cfg_inventory }}"
     force: true
-    trim_blocks: True
-    lstrip_blocks: True
-    mode: '0644'
+    trim_blocks: true
+    lstrip_blocks: true
   when:
-    - kdevops_workflows_dedicated_workflow
-    - kdevops_workflow_enable_ai
     - ansible_hosts_template.stat.exists
 
+- name: Update Ansible inventory access modification time so make sees it updated
+  ansible.builtin.file:
+    path: "{{ ansible_cfg_inventory }}"
+    state: touch
+    mode: "0755"
+
 - name: Verify if final host file exists
   ansible.builtin.stat:
     path: "{{ ansible_cfg_inventory }}"
diff --git a/playbooks/roles/gen_hosts/templates/hosts.j2 b/playbooks/roles/gen_hosts/templates/hosts.j2
index 0e896481..be0378db 100644
--- a/playbooks/roles/gen_hosts/templates/hosts.j2
+++ b/playbooks/roles/gen_hosts/templates/hosts.j2
@@ -5,242 +5,4 @@ proper identation. We don't need identation for the ansible hosts file.
 Each workflow which has its own custom ansible host file generated should use
 its own jinja2 template file and define its own ansible task for its generation.
 #}
-{% if kdevops_workflows_dedicated_workflow %}
-{% if workflows_reboot_limit %}
-[all]
-localhost ansible_connection=local
-{{ kdevops_host_prefix }}-reboot-limit
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-reboot-limit-dev
-{% endif %}
-
-[all:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-[baseline]
-{{ kdevops_host_prefix }}-reboot-limit
-
-[baseline:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% if kdevops_baseline_and_dev %}
-[dev]
-{{ kdevops_host_prefix }}-reboot-limit-dev
-
-[dev:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% endif %}
-[reboot-limit]
-{{ kdevops_host_prefix }}-reboot-limit
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-reboot-limit-dev
-{% endif %}
-
-[reboot-limit:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-{% elif kdevops_workflow_enable_fio_tests %}
-[all]
-localhost ansible_connection=local
-{{ kdevops_host_prefix }}-fio-tests
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-fio-tests-dev
-{% endif %}
-
-[all:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-[baseline]
-{{ kdevops_host_prefix }}-fio-tests
-
-[baseline:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% if kdevops_baseline_and_dev %}
-[dev]
-{{ kdevops_host_prefix }}-fio-tests-dev
-
-[dev:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% endif %}
-[fio_tests]
-{{ kdevops_host_prefix }}-fio-tests
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-fio-tests-dev
-{% endif %}
-
-[fio_tests:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-[service]
-
-[service:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-{% elif kdevops_workflow_enable_ai %}
-{% if ai_enable_multifs_testing|default(false)|bool %}
-{# Multi-filesystem section-based hosts #}
-[all]
-localhost ansible_connection=local
-{% for node in all_generic_nodes %}
-{{ node }}
-{% endfor %}
-
-[all:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-[baseline]
-{% for node in all_generic_nodes %}
-{% if not node.endswith('-dev') %}
-{{ node }}
-{% endif %}
-{% endfor %}
-
-[baseline:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% if kdevops_baseline_and_dev %}
-[dev]
-{% for node in all_generic_nodes %}
-{% if node.endswith('-dev') %}
-{{ node }}
-{% endif %}
-{% endfor %}
-
-[dev:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% endif %}
-[ai]
-{% for node in all_generic_nodes %}
-{{ node }}
-{% endfor %}
-
-[ai:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{# Individual section groups for multi-filesystem testing #}
-{% set section_names = [] %}
-{% for node in all_generic_nodes %}
-{% if not node.endswith('-dev') %}
-{% set section = node.replace(kdevops_host_prefix + '-ai-', '') %}
-{% if section != kdevops_host_prefix + '-ai' %}
-{% if section_names.append(section) %}{% endif %}
-{% endif %}
-{% endif %}
-{% endfor %}
-
-{% for section in section_names %}
-[ai_{{ section | replace('-', '_') }}]
-{{ kdevops_host_prefix }}-ai-{{ section }}
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-ai-{{ section }}-dev
-{% endif %}
-
-[ai_{{ section | replace('-', '_') }}:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% endfor %}
-{% else %}
-{# Single filesystem hosts (original behavior) #}
-[all]
-localhost ansible_connection=local
-{{ kdevops_host_prefix }}-ai
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-ai-dev
-{% endif %}
-
-[all:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-[baseline]
-{{ kdevops_host_prefix }}-ai
-
-[baseline:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% if kdevops_baseline_and_dev %}
-[dev]
-{{ kdevops_host_prefix }}-ai-dev
-
-[dev:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-
-{% endif %}
-[ai]
-{{ kdevops_host_prefix }}-ai
-{% if kdevops_baseline_and_dev %}
-{{ kdevops_host_prefix }}-ai-dev
-{% endif %}
-
-[ai:vars]
-ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
-{% endif %}
-{% else %}
-[all]
-localhost ansible_connection=local
-write-your-own-template-for-your-workflow-and-task
-{% endif %}
-{% else %}
-[all]
-localhost ansible_connection=local
-{% if kdevops_enable_nixos|default(false) %}
-{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
-{% else %}
-{{ kdevops_host_prefix }}
-{% endif %}
-{% if kdevops_baseline_and_dev == True %}
-{% if kdevops_enable_nixos|default(false) %}
-{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
-{% else %}
-{{ kdevops_host_prefix }}-dev
-{% endif %}
-{% endif %}
-{% if kdevops_enable_iscsi %}
-{{ kdevops_host_prefix }}-iscsi
-{% endif %}
-{% if kdevops_nfsd_enable %}
-{{ kdevops_host_prefix }}-nfsd
-{% endif %}
-[all:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-[baseline]
-{% if kdevops_enable_nixos|default(false) %}
-{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
-{% else %}
-{{ kdevops_host_prefix }}
-{% endif %}
-[baseline:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-[dev]
-{% if kdevops_baseline_and_dev %}
-{% if kdevops_enable_nixos|default(false) %}
-{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
-{% else %}
-{{ kdevops_host_prefix }}-dev
-{% endif %}
-{% endif %}
-[dev:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-{% if kdevops_enable_iscsi %}
-[iscsi]
-{{ kdevops_host_prefix }}-iscsi
-[iscsi:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-{% endif %}
-{% if kdevops_nfsd_enable %}
-[nfsd]
-{{ kdevops_host_prefix }}-nfsd
-[nfsd:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-{% endif %}
-[service]
-{% if kdevops_enable_iscsi %}
-{{ kdevops_host_prefix }}-iscsi
-{% endif %}
-{% if kdevops_nfsd_enable %}
-{{ kdevops_host_prefix }}-nfsd
-{% endif %}
-[service:vars]
-ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
-{% endif %}
+{% include 'workflows/' + kdevops_workflow_name + '.j2' %}
diff --git a/playbooks/roles/gen_hosts/templates/workflows/ai.j2 b/playbooks/roles/gen_hosts/templates/workflows/ai.j2
new file mode 100644
index 00000000..d0914436
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/ai.j2
@@ -0,0 +1,99 @@
+{# Workflow template for AI #}
+{% if ai_enable_multifs_testing|default(false)|bool %}
+{# Multi-filesystem section-based hosts #}
+[all]
+localhost ansible_connection=local
+{% for node in all_generic_nodes %}
+{{ node }}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for node in all_generic_nodes %}
+{% if not node.endswith('-dev') %}
+{{ node }}
+{% endif %}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for node in all_generic_nodes %}
+{% if node.endswith('-dev') %}
+{{ node }}
+{% endif %}
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[ai]
+{% for node in all_generic_nodes %}
+{{ node }}
+{% endfor %}
+
+[ai:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{# Individual section groups for multi-filesystem testing #}
+{% set section_names = [] %}
+{% for node in all_generic_nodes %}
+{% if not node.endswith('-dev') %}
+{% set section = node.replace(kdevops_host_prefix + '-ai-', '') %}
+{% if section != kdevops_host_prefix + '-ai' %}
+{% if section_names.append(section) %}{% endif %}
+{% endif %}
+{% endif %}
+{% endfor %}
+
+{% for section in section_names %}
+[ai_{{ section | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-ai-{{ section }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-ai-{{ section }}-dev
+{% endif %}
+
+[ai_{{ section | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
+{% else %}
+{# Single filesystem hosts (original behavior) #}
+[all]
+localhost ansible_connection=local
+{{ kdevops_host_prefix }}-ai
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-ai-dev
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{{ kdevops_host_prefix }}-ai
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{{ kdevops_host_prefix }}-ai-dev
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[ai]
+{{ kdevops_host_prefix }}-ai
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-ai-dev
+{% endif %}
+
+[ai:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+{% endif %}
diff --git a/playbooks/roles/gen_hosts/templates/workflows/blktests.j2 b/playbooks/roles/gen_hosts/templates/workflows/blktests.j2
new file mode 100644
index 00000000..eea3eef3
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/blktests.j2
@@ -0,0 +1,58 @@
+{# Workflow template for blktests #}
+[all]
+localhost ansible_connection=local
+{% for test_type in blktests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for test_type in blktests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for test_type in blktests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[blktests]
+{% for test_type in blktests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+
+[blktests:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% for test_type in blktests_enabled_test_types %}
+[blktests_{{ test_type | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+
+[blktests_{{ test_type | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
+
+[service]
+
+[service:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/cxl.j2 b/playbooks/roles/gen_hosts/templates/workflows/cxl.j2
new file mode 100644
index 00000000..53790f29
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/cxl.j2
@@ -0,0 +1,7 @@
+{# Workflow template for CXL #}
+[all]
+localhost ansible_connection=local
+write-your-own-template-for-cxl-workflow
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/fio-tests.j2 b/playbooks/roles/gen_hosts/templates/workflows/fio-tests.j2
new file mode 100644
index 00000000..548941a0
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/fio-tests.j2
@@ -0,0 +1,38 @@
+{# Workflow template for fio-tests #}
+[all]
+localhost ansible_connection=local
+{{ kdevops_host_prefix }}-fio-tests
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-fio-tests-dev
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{{ kdevops_host_prefix }}-fio-tests
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{{ kdevops_host_prefix }}-fio-tests-dev
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[fio_tests]
+{{ kdevops_host_prefix }}-fio-tests
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-fio-tests-dev
+{% endif %}
+
+[fio_tests:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[service]
+
+[service:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/fstests.j2 b/playbooks/roles/gen_hosts/templates/workflows/fstests.j2
new file mode 100644
index 00000000..362ce955
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/fstests.j2
@@ -0,0 +1,72 @@
+{# Workflow template for fstests #}
+[all]
+localhost ansible_connection=local
+{% for node_section in fstests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ node_section }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ node_section }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for node_section in fstests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ node_section }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for node_section in fstests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ node_section }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[fstests]
+{% for node_section in fstests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ node_section }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ node_section }}-dev
+{% endif %}
+{% endfor %}
+
+[fstests:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% for section in fstests_enabled_test_types %}
+[fstests_{{ section | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-{{ section }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ section }}-dev
+{% endif %}
+
+[fstests_{{ section | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
+
+[nfsd]
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+
+[nfsd:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[service]
+{% if kdevops_enable_iscsi %}
+{{ kdevops_host_prefix }}-iscsi
+{% endif %}
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+
+[service:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/gitr.j2 b/playbooks/roles/gen_hosts/templates/workflows/gitr.j2
new file mode 100644
index 00000000..86ee9326
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/gitr.j2
@@ -0,0 +1,41 @@
+{# Workflow template for gitr #}
+[all]
+localhost ansible_connection=local
+{% for host in gitr_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for host in gitr_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for host in gitr_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[gitr]
+{% for host in gitr_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[gitr:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/linux.j2 b/playbooks/roles/gen_hosts/templates/workflows/linux.j2
new file mode 100644
index 00000000..5d9ebb67
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/linux.j2
@@ -0,0 +1,110 @@
+{# Template for Linux custom kernel workflow #}
+[all]
+localhost ansible_connection=local
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}
+{% endif %}
+{% if kdevops_baseline_and_dev == True %}
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}-dev
+{% endif %}
+{% endif %}
+{% if kdevops_enable_iscsi %}
+{{ kdevops_host_prefix }}-iscsi
+{% endif %}
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+{% if kdevops_smbd_enable|default(false) %}
+{{ kdevops_host_prefix }}-smbd
+{% endif %}
+{% if kdevops_krb5kdc_enable|default(false) %}
+{{ kdevops_host_prefix }}-kdc
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}
+{% endif %}
+
+[baseline:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}-dev
+{% endif %}
+
+[dev:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+
+[linux]
+{{ kdevops_host_prefix }}
+{% if kdevops_baseline_and_dev == True %}
+{{ kdevops_host_prefix }}-dev
+{% endif %}
+
+[linux:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_enable_iscsi %}
+[iscsi]
+{{ kdevops_host_prefix }}-iscsi
+
+[iscsi:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+
+{% if kdevops_nfsd_enable %}
+[nfsd]
+{{ kdevops_host_prefix }}-nfsd
+
+[nfsd:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+
+{% if kdevops_smbd_enable|default(false) %}
+[smbd]
+{{ kdevops_host_prefix }}-smbd
+
+[smbd:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+
+{% if kdevops_krb5kdc_enable|default(false) %}
+[kdc]
+{{ kdevops_host_prefix }}-kdc
+
+[kdc:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+
+[service]
+{% if kdevops_enable_iscsi %}
+{{ kdevops_host_prefix }}-iscsi
+{% endif %}
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+{% if kdevops_smbd_enable|default(false) %}
+{{ kdevops_host_prefix }}-smbd
+{% endif %}
+{% if kdevops_krb5kdc_enable|default(false) %}
+{{ kdevops_host_prefix }}-kdc
+{% endif %}
+
+[service:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/ltp.j2 b/playbooks/roles/gen_hosts/templates/workflows/ltp.j2
new file mode 100644
index 00000000..fb120828
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/ltp.j2
@@ -0,0 +1,41 @@
+{# Workflow template for ltp #}
+[all]
+localhost ansible_connection=local
+{% for host in ltp_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for host in ltp_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for host in ltp_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[ltp]
+{% for host in ltp_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[ltp:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/mix.j2 b/playbooks/roles/gen_hosts/templates/workflows/mix.j2
new file mode 100644
index 00000000..86619309
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/mix.j2
@@ -0,0 +1,62 @@
+{# Default template for non-workflow setups #}
+[all]
+localhost ansible_connection=local
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}
+{% endif %}
+{% if kdevops_baseline_and_dev == True %}
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}-dev
+{% endif %}
+{% endif %}
+{% if kdevops_enable_iscsi %}
+{{ kdevops_host_prefix }}-iscsi
+{% endif %}
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+[all:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+[baseline]
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }} ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}
+{% endif %}
+[baseline:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+[dev]
+{% if kdevops_baseline_and_dev %}
+{% if kdevops_enable_nixos|default(false) %}
+{{ kdevops_host_prefix }}-dev ansible_python_interpreter=/run/current-system/sw/bin/python3
+{% else %}
+{{ kdevops_host_prefix }}-dev
+{% endif %}
+{% endif %}
+[dev:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% if kdevops_enable_iscsi %}
+[iscsi]
+{{ kdevops_host_prefix }}-iscsi
+[iscsi:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+{% if kdevops_nfsd_enable %}
+[nfsd]
+{{ kdevops_host_prefix }}-nfsd
+[nfsd:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
+{% endif %}
+[service]
+{% if kdevops_enable_iscsi %}
+{{ kdevops_host_prefix }}-iscsi
+{% endif %}
+{% if kdevops_nfsd_enable %}
+{{ kdevops_host_prefix }}-nfsd
+{% endif %}
+[service:vars]
+ansible_python_interpreter =  "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/mmtests.j2 b/playbooks/roles/gen_hosts/templates/workflows/mmtests.j2
new file mode 100644
index 00000000..d796cbe6
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/mmtests.j2
@@ -0,0 +1,77 @@
+{# Workflow template for mmtests #}
+[all]
+localhost ansible_connection=local
+{% if mmtests_enabled_test_types %}
+{% for test_type in mmtests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+{% else %}
+{{ kdevops_host_prefix }}-mmtests
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-mmtests-dev
+{% endif %}
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% if mmtests_enabled_test_types %}
+{% for test_type in mmtests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% endfor %}
+{% else %}
+{{ kdevops_host_prefix }}-mmtests
+{% endif %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% if mmtests_enabled_test_types %}
+{% for test_type in mmtests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endfor %}
+{% else %}
+{{ kdevops_host_prefix }}-mmtests-dev
+{% endif %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[mmtests]
+{% if mmtests_enabled_test_types %}
+{% for test_type in mmtests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+{% else %}
+{{ kdevops_host_prefix }}-mmtests
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-mmtests-dev
+{% endif %}
+{% endif %}
+
+[mmtests:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if mmtests_enabled_test_types %}
+{% for test_type in mmtests_enabled_test_types %}
+[mmtests_{{ test_type | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+
+[mmtests_{{ test_type | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
+{% endif %}
diff --git a/playbooks/roles/gen_hosts/templates/workflows/nfstest.j2 b/playbooks/roles/gen_hosts/templates/workflows/nfstest.j2
new file mode 100644
index 00000000..34aa7dfe
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/nfstest.j2
@@ -0,0 +1,41 @@
+{# Workflow template for nfstest #}
+[all]
+localhost ansible_connection=local
+{% for host in nfstest_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for host in nfstest_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for host in nfstest_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[nfstest]
+{% for host in nfstest_enabled_hosts %}
+{{ kdevops_host_prefix }}-{{ host }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ host }}-dev
+{% endif %}
+{% endfor %}
+
+[nfstest:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/pynfs.j2 b/playbooks/roles/gen_hosts/templates/workflows/pynfs.j2
new file mode 100644
index 00000000..6145b1a0
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/pynfs.j2
@@ -0,0 +1,7 @@
+{# Workflow template for pynfs #}
+[all]
+localhost ansible_connection=local
+write-your-own-template-for-pynfs-workflow
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/reboot-limit.j2 b/playbooks/roles/gen_hosts/templates/workflows/reboot-limit.j2
new file mode 100644
index 00000000..07bd6f80
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/reboot-limit.j2
@@ -0,0 +1,33 @@
+{# Workflow template for reboot-limit #}
+[all]
+localhost ansible_connection=local
+{{ kdevops_host_prefix }}-reboot-limit
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-reboot-limit-dev
+{% endif %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{{ kdevops_host_prefix }}-reboot-limit
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{{ kdevops_host_prefix }}-reboot-limit-dev
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[reboot-limit]
+{{ kdevops_host_prefix }}-reboot-limit
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-reboot-limit-dev
+{% endif %}
+
+[reboot-limit:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
diff --git a/playbooks/roles/gen_hosts/templates/workflows/selftests.j2 b/playbooks/roles/gen_hosts/templates/workflows/selftests.j2
new file mode 100644
index 00000000..4ef598c7
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/selftests.j2
@@ -0,0 +1,53 @@
+{# Workflow template for selftests #}
+[all]
+localhost ansible_connection=local
+{% for test_type in selftests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for test_type in selftests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for test_type in selftests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[selftests]
+{% for test_type in selftests_enabled_test_types %}
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+{% endfor %}
+
+[selftests:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% for test_type in selftests_enabled_test_types %}
+[selftests_{{ test_type | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-{{ test_type }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test_type }}-dev
+{% endif %}
+
+[selftests_{{ test_type | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
diff --git a/playbooks/roles/gen_hosts/templates/workflows/sysbench.j2 b/playbooks/roles/gen_hosts/templates/workflows/sysbench.j2
new file mode 100644
index 00000000..34f22a83
--- /dev/null
+++ b/playbooks/roles/gen_hosts/templates/workflows/sysbench.j2
@@ -0,0 +1,53 @@
+{# Workflow template for sysbench #}
+[all]
+localhost ansible_connection=local
+{% for test in enabled_sysbench_tests %}
+{{ kdevops_host_prefix }}-{{ test }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test }}-dev
+{% endif %}
+{% endfor %}
+
+[all:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+[baseline]
+{% for test in enabled_sysbench_tests %}
+{{ kdevops_host_prefix }}-{{ test }}
+{% endfor %}
+
+[baseline:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% if kdevops_baseline_and_dev %}
+[dev]
+{% for test in enabled_sysbench_tests %}
+{{ kdevops_host_prefix }}-{{ test }}-dev
+{% endfor %}
+
+[dev:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endif %}
+[sysbench]
+{% for test in enabled_sysbench_tests %}
+{{ kdevops_host_prefix }}-{{ test }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test }}-dev
+{% endif %}
+{% endfor %}
+
+[sysbench:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% for test in enabled_sysbench_tests %}
+[sysbench_{{ test | replace('-', '_') }}]
+{{ kdevops_host_prefix }}-{{ test }}
+{% if kdevops_baseline_and_dev %}
+{{ kdevops_host_prefix }}-{{ test }}-dev
+{% endif %}
+
+[sysbench_{{ test | replace('-', '_') }}:vars]
+ansible_python_interpreter = "{{ kdevops_python_interpreter }}"
+
+{% endfor %}
diff --git a/workflows/ai/Makefile b/workflows/ai/Makefile
index 1c297edd..7e9b8af2 100644
--- a/workflows/ai/Makefile
+++ b/workflows/ai/Makefile
@@ -3,9 +3,6 @@ PHONY += ai-setup ai-uninstall ai-destroy ai-help-menu
 PHONY += ai-tests ai-tests-baseline ai-tests-dev
 PHONY += ai-tests-results
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := hosts.j2
-endif
 
 export AI_DATA_TARGET := $(subst ",,$(CONFIG_AI_BENCHMARK_RESULTS_DIR))
 export AI_ARGS :=
diff --git a/workflows/blktests/Makefile b/workflows/blktests/Makefile
index 11cd9a65..12c0d933 100644
--- a/workflows/blktests/Makefile
+++ b/workflows/blktests/Makefile
@@ -11,9 +11,6 @@ ID=$(shell id -u)
 
 BLKTESTS_ARGS	:=
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := blktests.j2
-endif
 
 BLKTESTS_GIT:=$(subst ",,$(CONFIG_BLKTESTS_GIT))
 BLKTESTS_DATA:=$(subst ",,$(CONFIG_BLKTESTS_DATA))
diff --git a/workflows/cxl/Makefile b/workflows/cxl/Makefile
index bb130057..6d7894a9 100644
--- a/workflows/cxl/Makefile
+++ b/workflows/cxl/Makefile
@@ -1,7 +1,5 @@
 # SPDX-License-Identifier: copyleft-next-0.3.1
 
-export KDEVOPS_HOSTS_TEMPLATE := cxl.j2
-
 CXL_ARGS :=
 CXL_ARGS += ndctl_git='$(subst ",,$(CONFIG_NDCTL_GIT))'
 CXL_ARGS += ndctl_data=\"$(subst ",,$(CONFIG_NDCTL_DATA))\"
diff --git a/workflows/demos/reboot-limit/Kconfig b/workflows/demos/reboot-limit/Kconfig
index ecafe4bd..4fdcba05 100644
--- a/workflows/demos/reboot-limit/Kconfig
+++ b/workflows/demos/reboot-limit/Kconfig
@@ -8,6 +8,11 @@ config WORKFLOWS_REBOOT_LIMIT
 	  you really have no idea clearly if you can reboot without issues
 	  forever and may end up with a false positive on an unidentified issue.
 
+config KDEVOPS_WORKFLOW_NAME
+	string
+	output yaml
+	default "reboot-limit" if WORKFLOWS_REBOOT_LIMIT
+
 if WORKFLOWS_REBOOT_LIMIT
 
 menu "Configure and reboot-limit"
diff --git a/workflows/fio-tests/Makefile b/workflows/fio-tests/Makefile
index 5eb2ccbd..218cfbfc 100644
--- a/workflows/fio-tests/Makefile
+++ b/workflows/fio-tests/Makefile
@@ -1,6 +1,3 @@
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := fio-tests.j2
-endif
 
 fio-tests:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
diff --git a/workflows/fstests/Makefile b/workflows/fstests/Makefile
index d2e5c636..ef6347ac 100644
--- a/workflows/fstests/Makefile
+++ b/workflows/fstests/Makefile
@@ -8,9 +8,6 @@ FSTESTS_BASELINE_EXTRA :=
 
 export FSTYP:=$(subst ",,$(CONFIG_FSTESTS_FSTYP))
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := fstests.j2
-endif
 
 FSTESTS_ARGS += fstests_fstyp='$(FSTYP)'
 FS_CONFIG='$(FSTYP)/$(FSTYP).config'
diff --git a/workflows/gitr/Makefile b/workflows/gitr/Makefile
index c685395a..b1b7fe37 100644
--- a/workflows/gitr/Makefile
+++ b/workflows/gitr/Makefile
@@ -1,6 +1,3 @@
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := gitr.j2
-endif
 
 GITR_MNT:=$(subst ",,$(CONFIG_GITR_MNT))
 GITR_ARGS += gitr_mnt=$(GITR_MNT)
diff --git a/workflows/linux/Makefile b/workflows/linux/Makefile
index 30b123f9..1ab9d55d 100644
--- a/workflows/linux/Makefile
+++ b/workflows/linux/Makefile
@@ -14,7 +14,6 @@ TREE_CONFIG:=config-$(TREE_REF)-pure-iomap
 endif
 
 ifeq (y,$(CONFIG_BOOTLINUX_BUILDER))
-KDEVOPS_HOSTS_TEMPLATE=builder.j2
 endif
 
 # Describes the Linux clone
diff --git a/workflows/ltp/Makefile b/workflows/ltp/Makefile
index 767465bc..592c4f2b 100644
--- a/workflows/ltp/Makefile
+++ b/workflows/ltp/Makefile
@@ -1,6 +1,3 @@
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := ltp.j2
-endif
 
 LTP_REPO:=$(subst ",,$(CONFIG_LTP_REPO))
 LTP_ARGS += ltp_repo=$(LTP_REPO)
diff --git a/workflows/mmtests/Makefile b/workflows/mmtests/Makefile
index 9c010b95..69db9505 100644
--- a/workflows/mmtests/Makefile
+++ b/workflows/mmtests/Makefile
@@ -1,8 +1,5 @@
 MMTESTS_ARGS	:=
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := mmtests.j2
-endif
 
 mmtests:
 	$(Q)ansible-playbook $(ANSIBLE_VERBOSE) \
diff --git a/workflows/nfstest/Makefile b/workflows/nfstest/Makefile
index bbfd3f64..fca7a51a 100644
--- a/workflows/nfstest/Makefile
+++ b/workflows/nfstest/Makefile
@@ -1,6 +1,3 @@
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := nfstest.j2
-endif # CONFIG_WORKFLOWS_DEDICATED_WORKFLOW
 
 ifeq (y,$(CONFIG_NFSTEST_USE_KDEVOPS_NFSD))
 NFSTEST_ARGS += nfstest_nfs_server_host='$(subst ",,$(CONFIG_KDEVOPS_HOSTS_PREFIX))-nfsd'
diff --git a/workflows/pynfs/Makefile b/workflows/pynfs/Makefile
index 2f3ff97b..e0da0cf5 100644
--- a/workflows/pynfs/Makefile
+++ b/workflows/pynfs/Makefile
@@ -1,6 +1,3 @@
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := pynfs.j2
-endif
 
 PYNFS_GIT:=$(subst ",,$(CONFIG_PYNFS_GIT))
 PYNFS_ARGS += pynfs_git=$(PYNFS_GIT)
diff --git a/workflows/selftests/Makefile b/workflows/selftests/Makefile
index d3b7044c..b040647e 100644
--- a/workflows/selftests/Makefile
+++ b/workflows/selftests/Makefile
@@ -2,9 +2,6 @@
 
 SELFTESTS_ARGS :=
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := selftests.j2
-endif
 
 SELFTESTS_DYNAMIC_RUNTIME_VARS := "kdevops_run_selftests": True
 
diff --git a/workflows/sysbench/Makefile b/workflows/sysbench/Makefile
index daf7bc75..66e594d3 100644
--- a/workflows/sysbench/Makefile
+++ b/workflows/sysbench/Makefile
@@ -1,8 +1,5 @@
 PHONY += sysbench sysbench-test sysbench-telemetry sysbench-help-menu
 
-ifeq (y,$(CONFIG_WORKFLOWS_DEDICATED_WORKFLOW))
-export KDEVOPS_HOSTS_TEMPLATE := sysbench.j2
-endif
 
 TAGS_SYSBENCH_RUN := db_start
 TAGS_SYSBENCH_RUN += db_test_connection
-- 
2.50.1


  reply	other threads:[~2025-09-04  0:15 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-04  0:15 [PATCH v4 0/3] declared hosts support Luis Chamberlain
2025-09-04  0:15 ` Luis Chamberlain [this message]
2025-09-04  6:05   ` [PATCH v4 1/3] gen_hosts: use kdevops_workflow_name directly for template selection Daniel Gomez
2025-09-04  9:10     ` Luis Chamberlain
2025-09-04  0:15 ` [PATCH v4 2/3] declared_hosts: add support for pre-existing infrastructure Luis Chamberlain
2025-09-04  0:15 ` [PATCH v4 3/3] minio: add MinIO Warp S3 benchmarking with declared hosts support Luis Chamberlain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250904001521.1897970-2-mcgrof@kernel.org \
    --to=mcgrof@kernel.org \
    --cc=cel@kernel.org \
    --cc=da.gomez@kruces.com \
    --cc=hui81.qi@samsung.com \
    --cc=kdevops@lists.linux.dev \
    --cc=kundan.kumar@samsung.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox