Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
61923ad
#8 Slurm Daemons exclude -D and --systemd in v24.05
cwrdst Jun 17, 2025
321c5af
#8 use localhost for slurmctld name
cwrdst Jun 17, 2025
5406e41
#11 #12 intermediate save, not complte
cwrdst Jun 28, 2025
b1ac451
#12 more progress
cwrdst Jun 28, 2025
f33c9c2
#12 more progress on rpm build run path
cwrdst Jun 28, 2025
b7fc2f5
#12 More progress on rpmbuild run path
cwrdst Jun 29, 2025
0e66982
#12 more progress
cwrdst Jul 1, 2025
a37ae95
#12 more progress
cwrdst Jul 2, 2025
80ce020
#13 Setup new exec paths
cwrdst Jul 3, 2025
3bcb3fa
#12 Ready for pull review
cwrdst Jul 9, 2025
74765e3
#12 Update change log
cwrdst Jul 9, 2025
2364cfa
update defaults main
cwrdst Jul 9, 2025
4f7c03c
pull request updates
cwrdst Jul 10, 2025
b795db4
slurm_daemon_spool_dir
cwrdst Jul 10, 2025
d120b4a
more updates
cwrdst Jul 24, 2025
947540f
check slurm install method conflict
cwrdst Jul 24, 2025
b547698
slurm readme update
cwrdst Jul 24, 2025
247236c
Create slurmbuild user before temdirs
cwrdst Jul 25, 2025
82428e2
fix cut and past error
cwrdst Jul 25, 2025
f227568
curly brace fix
cwrdst Jul 25, 2025
50aa77a
more debug updates
cwrdst Jul 29, 2025
61368f4
#17 & #18 - updates
cwrdst Jul 30, 2025
983724a
make sure remote slurm_local_repo_host exists
cwrdst Jul 30, 2025
1401f28
spacing fix
cwrdst Jul 30, 2025
35cfaa5
system service templates
cwrdst Aug 21, 2025
ab6a7a2
#19 Update templates and source vs rpm paths
cwrdst Aug 22, 2025
ad3447e
#19 template update
cwrdst Aug 22, 2025
b17b324
#19 slurmd typo and add user to restd.sysconfig
cwrdst Aug 22, 2025
83c3cdf
#21 JWT Source + rpm conflict
cwrdst Aug 26, 2025
6774f4e
#21 debug updates
cwrdst Aug 27, 2025
292def3
#21 another bug fix
cwrdst Aug 27, 2025
ebd95f7
#21 Skip rpm install of libjwt if source is selected
cwrdst Aug 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions slurm/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@


https://github.com/dstdev/ansible-roles/tree/cwr_dev

New vars in slurm/defaults/main.yaml
- slurm_build_rpms | bool
- slurm_rpm_install
- slurm source_install
- slurm_rpmbuild_user | non-privleged user id
- slurm_rpmbuild_user_home | home path + rpmbuild base
- slurm_download_url | github or schedmd
- slurm_local_repo_name:
- slurm_local_repo_host:
- slurm_rpm_repo_scp_path: scp command to put rpms on repo
- slurm_rpm_final_path:


New run path when slurm_build_rpms is true

slurm/tasks/main.yaml
slurm/tasks/rpmbuild.yaml
- creates new slurm build user

slurm/tasks/install_dev_reqs.yaml
slurm/tasks/rpmbuild_pmix.yaml
- does rpm build - rpms in "{{ slurm_rpmbuild_user_home }}/rpmbuild"

slurm/tasks/rpmbuild_slurm.yaml
- does rpm build - rpms in "{{ slurm_rpmbuild_user_home }}/rpmbuild"

slurm/tasks/cleanup.yaml"

end_play

New install method vars:
slurm_rpm_install and slurm_source_install
slurm_rpm_install and slurm_source_install are mutually exclusive
slurm_rpm_install will install rpms from local RPM repo
slurm_source_install follows the existing source install path

New falure check
the latest version of slurm on the rpm repo must match the stated
install path on the

44 changes: 40 additions & 4 deletions slurm/README.md
Original file line number Diff line number Diff line change
@@ -1,25 +1,61 @@
Role Name
Slurm
=========

Install and configures slurm controller, daemons, and database.

RPMBuild Execution Path
-----------------------
When `slurm_build_rpms` is true, Slurm and optionally PMix rpms are build and copied out to the local RPM repo hosting Slurm and PMix packages. The role exits after the packages are copies over to the repo.
Running `rpmbuild` using the code bundle from github is often problematic. For this reason, the rpmbuild path downloads the source bundle from SchedMD, not GitHub.

Requirements
------------

Running Mariadb/MySQL Role or instance and munge development libraries must be installed.

Example Build Command
---------------------
```
ansible-playbook -i inventory.ini -c local -e @slurm_opts.json slurm.yml
```

Example Vars File
-----------------
slurm_opts.json
```
{
"slurm_build_rpms": false,
"slurm_source_install": false,
"slurm_rpm_install": true,
"slurm_version": "23.11.11",
"slurm_enable_pmix": true,
"slurm_pmix_version": "5.0.8",
"slurm_enable_restd": true,
"slurm_jwt_version": "v2.1.2"

}
```

Role Variables
--------------
==============

rpmbuild
--------

| Name | Default Value | Description |
|---------------------------------------------|-----------------------|-----------------------------------------------------------------------------------|
| mounts | [] | List of dictionaries defining the mount |
| slurm_rpmbuild_user | slurmbuild | Non-privileged user for rpmbuilds. This user will be created if necessary.
| slurm_rpmbuild_user_home |/home/{{ slurm_rpmbuild_user }}| rpmbuild root
| slurm_local_repo_name | "" | Name of Slurm RPM Repo
| slurm_local_repo_host | "" | Hostname for slrum RPM Repo
| slurm_rpm_repo_scp_path |root@{{ slurm_local_repo_host }}:{{ slurm_rpm_server_path_base }}/{{ slurm_local_repo_name }} | scp command to put packages
| slurm_rpm_final_path | | Path to local final rpm packages
| slurm_accounting_storage_enforce | 0 | Accounting enforcement |
| slurm_cgroup_automount | yes | Automount cgroups |
| slurm_cgroup_constrain_cores | yes | Constrain cores available |
| slurm_cgroup_constrain_ram_space | yes | Constrain ram space |
| slurm_cluster_name | cluster | Name for this cluster install |
| slurm_cluster_name | cluster | Name for this cluster install
| slurm_conf_max_job_count | 10000 | slurm.conf MaxJobCount
| slurm_conf_accounting_storage_external_host | "" | External Accounting DB host ip and port |
| slurm_conf_accouting_storage_tres | [] | AccoutingStorageTres Parameter |
| slurm_conf_cli_filter_plugins | [] | List of filter/modification plugins |
Expand Down
62 changes: 52 additions & 10 deletions slurm/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -1,10 +1,47 @@
---
# Build RPM Packages - when true, this will biuld RPM packages for slurm
# and optionally PMIX then exit the role and complete.

# RPM Build Details
#======================
slurm_build_rpms: false
slurm_rpmbuild_user: slurmbuild
slurm_rpmbuild_user_home: "/home/{{ slurm_rpmbuild_user }}"
slurm_rpm_final_path: "/home/{{ slurm_rpmbuild_user }}/rpmbuild/RPMS/{{ ansible_architecture }}"
slurm_local_repo_def_path: /etc/yum.repos.d/slurm.repo

# Local Slurm Repo Details
#==========================
# This assumes an HTTP based RPM Repo
slurm_local_repo_description: "Slurm RPM Repository"
# Path to HTTP server document root
slurm_rpm_server_path_base: "/var/www/html"
slurm_local_repo_name: slurm
slurm_local_repo_host: yuma-s1
slurm_rpm_local_repo_url: "http://{{ slurm_local_repo_host }}/{{ slurm_local_repo_name }}"
slurm_rpm_repo_path: "{{ slurm_rpm_server_path_base }}/{{ slurm_local_repo_name }}"
slurm_rpm_repo_scp_path: "root@{{ slurm_local_repo_host }}:{{ slurm_rpm_repo_path }}"


# defaults file for slurm-controller
slurm_database_password: "default"
#slurm_version: "21.08.8-2"
slurm_version: "23.11.5-1"

# Code hosted at Github and SchedMD have different filename formats
# Github slurm versions are nn.nn.nn-1
# ShedMD release versions are nn.nn.nn
# slurm_version: "21.08.8-1" # GitHub
# slurm_version: "23.11.11" # SchedMD
slurm_version: "24.11.6"

# For Slurm < 24.05.8-0 the slurmd and slurmctld use "-D --systemd"
# For Slurm >= 24.05.8-0, slurmd and slurmctld use only "--systemd"
# https://github.com/SchedMD/slurm/blob/slurm-24.05/NEWS
slurm_dasd_d_ver: "24.05.8"
slurm_dash_d: "-D"

slurm_enable_systemd_daemon_flag: false
slurm_jwt_version: "v1.12.0"
slurm_build_jwt_source: false
slurm_jwt_version: "v2.1.2"
slurm_slurmd: false
slurm_controller: false
slurm_uid: 450
Expand All @@ -21,7 +58,7 @@ slurm_daemon_debug: 3
slurm_proctrack_type: "cgroup"
slurm_nodes: []
slurm_partitions: []
slurm_daemon_spool_dir: /var/spool/slurmd/
slurm_daemon_spool_dir: /var/spool/slurmd
slurm_state_save_location: /var/spool/slurmctld
slurm_scheduler_type: backfill
slurm_accounting_storage_enforce: 0
Expand Down Expand Up @@ -79,15 +116,16 @@ slurm_install_root: "/opt/slurm"
slurm_update_symlink: yes
slurm_disable_restart: false
slurm_rpm_install: false
slurm_source_install: false
slurm_rpm_repo: ""

slurm_build_jobs: 4
slurm_build_jobs: 8
slurm_enable_cgroup_conf: true
slurm_enable_restd: false
slurm_enable_restd: true
slurm_restd_port: 8911
slurm_restd_host: "0.0.0.0"
slurm_restd_user: "{{undef(hint='You must specify the slurm rest api user')}}"
slurm_restd_jwt_key: "{{undef(hint='You must specify the jwt key value')}}"
slurm_restd_user: srestd
slurm_restd_jwt_key: /var/spool/slurmctld/jwt_hs256.key


# Slurm profile variables
Expand All @@ -110,7 +148,7 @@ slurm_task_epilog_append: ""

# Firewall rules
slurm_firewalld_enabled: false
slurm_firewalld_subnet: "10.141.0.0/16"
slurm_firewalld_subnet: "192.168.114.0/24"
slurm_firewalld_python_interpreter: "/usr/bin/python"

# Gres information
Expand All @@ -127,9 +165,13 @@ slurm_conf_accounting_storage_external_host: ""
slurm_enable_pam_adopt: false
slurm_groups_allowed: []
slurm_enable_pmix: true
slurm_pmix_version: 5.0.1
slurm_pmix_version: 5.0.8

slurm_force_install: false

slurm_conf_extra: {}
slurmdbd_conf_extra: {}


slurm_rpm_check_path: "{{ slurm_rpmbuild_user_home }}/rpmbuild/RPMS/{{ ansible_architecture }}/slurm-{{ slurm_version }}-1.el{{ ansible_distribution_major_version }}.{{ ansible_architecture }}.rpm"
pmix_rpm_check_path: "{{ slurm_rpmbuild_user_home }}/rpmbuild/RPMS/{{ ansible_architecture }}/pmix-{{ slurm_pmix_version }}-1.el{{ ansible_distribution_major_version }}.{{ ansible_architecture }}.rpm"
64 changes: 61 additions & 3 deletions slurm/tasks/install.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,26 @@
- slurm_install_slurmd
- slurm_install_restd

- ansible.builtin.include_tasks: "jwt.yaml"
when: slurm_enable_restd and install_slurm
# Check if JWT RPM is installed
- name: Check if JWT RPM is installed
ansible.builtin.set_fact:
jwt_packages: "{{ ansible_facts.packages['libjwt'] | default([]) }}"
tags:
- slurm
- slurm_install_restd
when: slurm_enable_restd and slurm_build_jwt_source

# Fail if slurm_build_jwt_source is true and jwt is installed
- ansible.builtin.fail:
msg:
- "JWT is already installed via RPM - installing from source is not supported."
- "remove jwt rpm packages before building from source."
when: slurm_build_jwt_source and jwt_packages | length > 0

# Build and install JWT from source
- name: Build and install JWT from source
ansible.builtin.include_tasks: "jwt.yaml"
when: slurm_enable_restd and slurm_build_jwt_source
tags:
always

Expand All @@ -21,6 +39,35 @@
tags:
always


- name: Set slurm download version
ansible.builtin.set_fact:
slurm_download_version: "{{ slurm_version | replace('.', '-')}}"
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd
- slurm_configure

- name: Get slurm download version length
ansible.builtin.set_fact:
slurm_download_version_length: "{{ slurm_download_version.split('-') | length }}"
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd
- slurm_configure

- name: Update slurm download version
ansible.builtin.set_fact:
slurm_download_version: "{{ slurm_download_version }}-1"
when: "slurm_download_version_length | int < 4"
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd
- slurm_configure

- name: Download slurm
get_url:
url: "https://github.com/SchedMD/slurm/archive/refs/\
Expand Down Expand Up @@ -48,7 +95,7 @@

- name: Configure slurm
command: "./configure --prefix=/{{slurm_install_directory}} --sysconfdir=/etc/slurm \
--localstatedir=/var --runstatedir=/run {% if slurm_enable_restd %}--with-jwt={{slurm_install_directory}}{% endif %}\
--localstatedir=/var --runstatedir=/run {% if slurm_enable_restd and slurm_build_jwt_source %}--with-jwt={{slurm_install_directory}}{% endif %}\
{% if slurm_enable_pmix %} --with-pmix={{slurm_install_directory}}{% endif %}"
args:
chdir: "{{slurm_tmpdir}}/slurm-slurm-{{slurm_download_version}}"
Expand Down Expand Up @@ -88,6 +135,17 @@
- slurm
- slurm_install_slurmd

- name: Create jwt key
ansible.builtin.copy:
dest: "{{slurm_state_save_location}}/jwt_hs256.key"
content: "{{slurm_restd_jwt_key}}"
owner: "{{slurm_uid}}"
group: "{{slurm_gid}}"
mode: "0600"
tags:
- slurm_install_restd
when: slurm_enable_restd

# TODO: Cleanup tmp spaces
#- name: Clean up tmp space
#ansible.builtin.file:
Expand Down
11 changes: 11 additions & 0 deletions slurm/tasks/install_dev_reqs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
- name: Install required development packages
ansible.builtin.dnf:
name: "{{item}}"
state: present
enablerepo: "{{ slurm_el_repos }}"

loop: "{{slurm_required_devel_packages}}"
when: ansible_distribution_major_version | int >= 8
tags:
- slurm_build_rpms
66 changes: 66 additions & 0 deletions slurm/tasks/install_reqs.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
---
- name: Install required packages EL 8+
ansible.builtin.dnf:
name: "{{item}}"
state: present
enablerepo: "{{ slurm_el_repos }}"

loop: "{{slurm_required_packages}}"
when: ansible_distribution_major_version | int >= 8
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd

- name: Install required packages EL 7
ansible.builtin.package:
name: "{{item}}"
state: present
loop: "{{slurm_required_packages}}"
when: ansible_distribution_major_version | int == 7
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd

- name: Install slurmdbd requirements el8+
ansible.builtin.dnf:
name: "{{item}}"
enablerepo: "{{ slurm_el_repos }}"
loop: "{{slurm_dbd_required_packages}}"
when: slurm_controller and slurm_enable_restd and ansible_distribution_major_version | int >= 8
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd

- name: Install slurmdbd requirements
ansible.builtin.package:
name: "{{item}}"
when: slurm_controller
loop: "{{slurm_dbd_required_packages}}"
tags:
- slurm
- slurm_install_controller
- slurm_install_slurmd

- name: Install slurm rest api requirements EL8+
ansible.builtin.dnf:
name: "{{item}}"
enablerepo: "{{ slurm_el_repos }}"
loop: "{{slurm_restapi_required_packages}}"
when: slurm_enable_restd and ansible_distribution_major_version | int >= 8
tags:
- slurm
- slurm_install_restapi
- slurm_install_restd

- name: Install slurm rest api requirements EL7
ansible.builtin.package:
name: "{{item}}"
loop: "{{slurm_restapi_required_packages}}"
when: slurm_enable_restd and ansible_facts['distribution_major_version'] == "7"
tags:
- slurm
- slurm_install_restapi
- slurm_install_restd
Loading
Loading