flame-roles/slurm_qos/tasks/main.yml

93 lines
3.7 KiB
YAML
Raw Permalink Normal View History

2025-01-29 20:06:07 -05:00
---
- name: Ensure Slurm QoS exist
when: slurm_qos_settings | default([]) | length > 0
block:
- name: Check Slurm QoS list
ansible.builtin.command: "sacctmgr -Pn show qos format=name"
register: qos_list
changed_when: false
failed_when: false
- name: Add Slurm QoS (if missing)
ansible.builtin.command: >
sacctmgr -i add qos {{ item.name }}
loop: "{{ slurm_qos_settings }}"
loop_control:
label: "{{ item.name }}"
when: qos_list.stdout is not search(item.name)
changed_when: true
- name: Modify Slurm QoS (if already exists)
ansible.builtin.command: >
sacctmgr -i modify qos {{ item.name }} set
{% if item.MaxNodes is defined %}MaxNodes={{ item.MaxNodes }}{% endif %}
{% if item.MaxSubmitJobs is defined %}MaxSubmitJobs={{ item.MaxSubmitJobs }}{% endif %}
{% if item.MaxJobsPerUser is defined %}MaxJobsPerUser={{ item.MaxJobsPerUser }}{% endif %}
{% if item.GraceTime is defined %}GraceTime={{ item.GraceTime }}{% endif %}
{% if item.Preempt is defined %}Preempt={{ item.Preempt }}{% endif %}
loop: "{{ slurm_qos_settings }}"
loop_control:
label: "{{ item.name }}"
when: qos_list.stdout is search(item.name)
changed_when: true
- name: Ensure Slurm accounts exist
when: slurm_qos_accounts | default([]) | length > 0
block:
- name: Get Slurm cluster list
ansible.builtin.command: "sacctmgr -Pn show cluster format=cluster"
register: cluster_list
changed_when: false
failed_when: false
- name: Set cluster fact if only one cluster is found
set_fact:
slurm_cluster_name: "{{ cluster_list.stdout_lines[0] }}"
when: cluster_list.stdout_lines | length == 1
- name: Check if Slurm account exists
ansible.builtin.command: "sacctmgr -Pn list account name={{ item.name }} format=account"
register: account_check
changed_when: false
failed_when: false
loop: "{{ slurm_qos_accounts }}"
loop_control:
label: "{{ item.name }}"
- name: Add Slurm account
ansible.builtin.command: >
sacctmgr -i add account name={{ item.item.name }}
cluster={{ slurm_cluster_name }}
{% if item.item.organization is defined %}Organization={{ item.item.organization }}{% endif %}
{% if item.item.description is defined %}Description="{{ item.item.description }}"{% endif %}
{% if item.item.parent is defined %}Parent={{ item.item.parent }}{% endif %}
{% if item.item.default_qos is defined %}DefaultQOS={{ item.item.default_qos }}{% endif %}
{% if item.item.qos is defined %}QOS={{ item.item.qos | join(',') }}{% endif %}
loop: "{{ account_check.results }}"
loop_control:
label: "{{ item.item.name }}"
when: item.stdout is not search(item.item.name)
changed_when: true
- name: Ensure Slurm users exist
when: slurm_qos_users | default([]) | length > 0
block:
- name: Check Slurm users
ansible.builtin.command: "sacctmgr -Pn list users format=user"
register: user_list
changed_when: false
failed_when: false
- name: Add Slurm user
ansible.builtin.command: >
sacctmgr -i add user name={{ item.username }}
{% if item.sponsor is defined %}Account={{ item.sponsor }}{% endif %}
{% if item.comment is defined %}Comment="{{ item.comment }}"{% endif %}
{% if item.qos_list is defined and item.qos_list | length > 0 %}QOS={{ item.qos_list | join(',') }}{% endif %}
{% if item.qos_default is defined %}DefaultQOS={{ item.qos_default }}{% endif %}
loop: "{{ slurm_qos_users }}"
loop_control:
label: "{{ item.username }}"
when: user_list.stdout is not search(item.username)
changed_when: true