Skip to content

Commit 34f0914

Browse files
committed
feat(conf): support all Slurm-web JWT auth modes
Add support for all Slurm-web to slurmrestd JWT authentication modes, including auto and static.
1 parent 27c86bf commit 34f0914

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ and this project adheres to
6767
`common_devs_priorities`.
6868
- Add `slurm_restd_port` variable in inventory to control slurmrestd TCP/IP
6969
listening port.
70+
- Support all Slurm-web to slurmrestd JWT authentication modes.
7071
- docs:
7172
- Add sysctl `fs.inotify.max_user_instances` value increase recommendation in
7273
README.md to avoid weird issue when launching many containers.

conf/group_vars/all.yml

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ fhpc_local_ca_dir: "{{ fhpc_cluster_state_dir }}/ca"
44
fhpc_ldap_server: "{{ groups['admin'][0] }}"
55
fhpc_ldap_base: "dc=cluster,dc={{ fhpc_cluster }}"
66
fhpc_primary_group: "{{ fhpc_groups[0].name }}"
7+
fhpc_slurm_with_jwt: false
8+
fhpc_slurmrestd_with_unix_socket: true
79
fhpc_slurmrestd_socket: /run/slurmrestd/slurmrestd.socket
10+
fhpc_slurmrestd_port: 6820
11+
fhpc_local_slurm_jwt_key: "{{ fhpc_cluster_state_dir }}/slurm/jwt_hs256.key"
812

913
# roles variables
1014
common_local_ca_dir: "{{ fhpc_local_ca_dir }}"
@@ -36,13 +40,19 @@ slurm_profiles:
3640
slurm_local_munge_key_file: "{{ fhpc_cluster_state_dir }}/munge/munge.key"
3741
slurm_local_slurm_key_file: "{{ fhpc_cluster_state_dir }}/slurm/slurm.key"
3842
slurm_local_mariadb_password_file: "{{ fhpc_cluster_state_dir }}/mariadb/mariadb.password"
39-
slurm_local_jwt_key_file: "{{ fhpc_cluster_state_dir }}/slurm/jwt_hs256.key"
43+
slurm_local_jwt_key_file: "{{ fhpc_local_slurm_jwt_key }}"
44+
slurm_with_jwt: "{{ fhpc_slurm_with_jwt }}"
4045
slurm_users: "{{ fhpc_users | map(attribute='login') | list }}"
46+
slurm_restd_with_unix_socket: "{{ fhpc_slurmrestd_with_unix_socket }}"
4147
slurm_restd_socket: "{{ fhpc_slurmrestd_socket }}"
48+
slurm_restd_port: "{{ fhpc_slurmrestd_port }}"
4249
slurm_accounts: "{{ fhpc_groups }}"
4350
slurm_compute_nodes: "{{ fhpc_nodes['compute'] }}"
4451
racksdb_database: "{{ fhpc_db }}"
4552
redis_local_password_file: "{{ fhpc_cluster_state_dir }}/redis/redis.password"
53+
slurmweb_local_slurmrestd_jwt_key_file: "{{ fhpc_local_slurm_jwt_key }}"
54+
slurmweb_slurmrestd_uri: "{{ fhpc_slurmrestd_with_unix_socket | ternary('unix:' ~ fhpc_slurmrestd_socket, 'http://localhost:' ~ fhpc_slurmrestd_port ) }}"
55+
slurmweb_slurmrestd_auth: "{{ fhpc_slurm_with_jwt | ternary('jwt', 'local') }}"
4656
slurmweb_slurmrestd_socket: "{{ fhpc_slurmrestd_socket }}"
4757
slurmweb_http_server_names:
4858
- "{{ slurmweb_hostname }}"
@@ -51,7 +61,11 @@ slurmweb_agent_settings_defaults:
5161
service:
5262
cluster: "{{ fhpc_cluster }}"
5363
slurmrestd:
54-
socket: "{{ fhpc_slurmrestd_socket }}"
64+
uri: "{{ slurmweb_slurmrestd_uri }}"
65+
auth: "{{ slurmweb_slurmrestd_auth }}"
66+
jwt_mode: "{{ slurmweb_slurmrestd_jwt_mode }}"
67+
jwt_key: "{{ slurmweb_slurmrestd_jwt_key }}"
68+
jwt_token: "{{ slurmweb_slurmrestd_jwt_token | default(omit) }}"
5569
cache:
5670
enabled: yes
5771
password: "{{ lookup('ansible.builtin.file', redis_local_password_file) }}"

conf/roles/slurmweb/defaults/main.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,12 @@ slurmweb_hostname: "{{ inventory_hostname }}"
44
slurmweb_http_server_names:
55
- "{{ slurmweb_hostname }}"
66
slurmweb_jwt_key: /var/lib/slurm-web/jwt.key
7+
slurmweb_slurmrestd_uri: unix:/run/slurmrestd/slurmrestd.socket
8+
slurmweb_slurmrestd_auth: local
9+
slurmweb_slurmrestd_jwt_mode: auto
10+
slurmweb_slurmrestd_jwt_key: /var/lib/slurm-web/slurmrestd_jwt_hs256.key
11+
slurmweb_slurmrestd_jwt_token: null
12+
slurmweb_local_slurmrestd_jwt_key_file: jwt_hs256.key # dummy
713
slurmweb_agent_subdir: agent
814
slurmweb_agent_settings_defaults: {}
915
slurmweb_gateway_settings_defaults: {}

conf/roles/slurmweb/tasks/main.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,30 @@
88
name: "{{ slurmweb_packages }}"
99
state: latest
1010

11+
- name: Obtain Slurm JWT
12+
block:
13+
- name: Generate JWT with Slurm scontrol
14+
ansible.builtin.command: scontrol token lifespan=infinite username=slurm
15+
register: slurmweb_slurm_scontrol_generate
16+
17+
- name: Setting slurmrestd JWT fact
18+
ansible.builtin.set_fact:
19+
slurmweb_slurmrestd_jwt_token: "{{ slurmweb_slurm_scontrol_generate.stdout | split('=') | last }}"
20+
when:
21+
- slurmweb_slurmrestd_auth == 'jwt'
22+
- slurmweb_slurmrestd_jwt_mode == 'static'
23+
24+
- name: Deploy slurm JWT signing key
25+
ansible.builtin.copy:
26+
src: "{{ slurmweb_local_slurmrestd_jwt_key_file }}"
27+
dest: "{{ slurmweb_slurmrestd_jwt_key }}"
28+
owner: slurm # FIXME: agent and key must run as slurm-web when uri is http
29+
group: slurm
30+
mode: 0400
31+
when:
32+
- slurmweb_slurmrestd_auth == 'jwt'
33+
- slurmweb_slurmrestd_jwt_mode == 'auto'
34+
1135
- name: Deploy Slurm-web configuration files
1236
ansible.builtin.template:
1337
src: "{{ item }}.ini.j2"
@@ -21,6 +45,9 @@
2145
notify:
2246
- Restart slurm-web-{{ item }} uWSGI
2347

48+
#
49+
# slurm-web-gen-jwt-key needs gateway configuration file.
50+
#
2451
- name: Create JWT signing key
2552
ansible.builtin.command:
2653
cmd: /usr/libexec/slurm-web/slurm-web-gen-jwt-key

0 commit comments

Comments
 (0)