93 lines
3.7 KiB
YAML
93 lines
3.7 KiB
YAML
|
---
|
||
|
- 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
|