diff --git a/roles/slurm-provision/tasks/main.yml b/roles/slurm-provision/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..4ed1e2c67327e88758d27869cb5e8ed9152aa1fe --- /dev/null +++ b/roles/slurm-provision/tasks/main.yml @@ -0,0 +1,8 @@ +--- +- name: copy slurm provision template + template: src=slurm_provision.sh.j2 dest={{ slurm_provision }} mode=755 owner=root + sudo: true + +- name: slurm cron job + cron: name=slurm-provision job={{ slurm_provision }} user=root minute=*/5 state=present + sudo: true diff --git a/roles/slurm-provision/templates/slurm_provision.sh b/roles/slurm-provision/templates/slurm_provision.sh new file mode 100644 index 0000000000000000000000000000000000000000..830d377e446811ae9574b69e583fbe3863f38b39 --- /dev/null +++ b/roles/slurm-provision/templates/slurm_provision.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +CVL_HOME="/cvl/home" +user_list=($(getent passwd | cut -d ":" -f1)) +log_file="/root/slurm.log" + +for user in ${user_list[*]}; do + uid=$(id -u ${user}) + gid=$(id -g ${user}) + user_home=${CVL_HOME}/${user} + if [ ! -d ${user_home} ]; then + mkdir -p ${user_home} + cp -r /etc/skel/* ${user_home} + chown -R ${uid}:${gid} ${user_home} + chmod 700 ${user_home} + + account=cvl + cluster=m2cvl + find=$(sacctmgr list cluster ${cluster} | grep ${cluster}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add cluster ${cluster}" || { echo "error to create cluster ${cluster}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list account ${account} | grep ${account}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add account ${account} Description=CVL Organization=monash cluster=${cluster}" || { echo "error to create account ${account}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list user ${username} | grep ${username}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add user ${username} account=${account} cluster=${cluster}" || { echo "error to create user ${username}" >> ${log_file} && exit 1; } + fi + fi +done + + diff --git a/roles/slurm-provision/templates/slurm_provision.sh.j2 b/roles/slurm-provision/templates/slurm_provision.sh.j2 new file mode 100644 index 0000000000000000000000000000000000000000..8cf5376ecc6c75a0a0b4dd1dfb0bda58644dca06 --- /dev/null +++ b/roles/slurm-provision/templates/slurm_provision.sh.j2 @@ -0,0 +1,35 @@ +#!/bin/sh + +CVL_HOME="/cvl/home" +user_list=($(getent passwd | cut -d ":" -f1)) +log_file="/root/slurm.log" + +for user in ${user_list[*]}; do + uid=$(id -u ${user}) + gid=$(id -g ${user}) + user_home=${CVL_HOME}/${user} + if [ ! -d ${user_home} ]; then + mkdir -p ${user_home} + cp -r /etc/skel/* ${user_home} + chown -R ${uid}:${gid} ${user_home} + chmod 700 ${user_home} + + account={{ projectname }} + cluster={{ clustername }} + + find=$(sacctmgr list cluster ${cluster} | grep ${cluster}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add cluster ${cluster}" || { echo "error to create cluster ${cluster}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list account ${account} | grep ${account}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add account ${account} Description=CVL Organization=monash cluster=${cluster}" || { echo "error to create account ${account}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list user ${username} | grep ${username}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add user ${username} account=${account} cluster=${cluster}" || { echo "error to create user ${username}" >> ${log_file} && exit 1; } + fi + fi +done + + diff --git a/roles/slurm-provision/templates/slurm_provision.sh.j2.v1 b/roles/slurm-provision/templates/slurm_provision.sh.j2.v1 new file mode 100644 index 0000000000000000000000000000000000000000..2b8bf1f1c16509d40d208c1ba616c4400e13fc55 --- /dev/null +++ b/roles/slurm-provision/templates/slurm_provision.sh.j2.v1 @@ -0,0 +1,34 @@ +#!/bin/sh + +CVL_HOME="/cvl/home" +user_list=($(getent passwd | cut -d ":" -f1)) +log_file="/root/slurm.log" + +for user in ${user_list[*]}; do + uid=$(id -u ${user}) + gid=$(id -g ${user}) + user_home=${CVL_HOME}/${user} + if [ ! -d ${user_home} ]; then + mkdir -p ${user_home} + cp -r /etc/skel/* ${user_home} + chown -R ${uid}:${gid} ${user_home} + chmod 700 ${user_home} + + account={{ projectname }} + cluster={{ clustername }} + find=$(sacctmgr list cluster ${cluster} | grep ${cluster}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add cluster ${cluster}" || { echo "error to create cluster ${cluster}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list account ${account} | grep ${account}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add account ${account} Description=CVL Organization=monash cluster=${cluster}" || { echo "error to create account ${account}" >> ${log_file} && exit 1; } + fi + find=$(sacctmgr list user ${username} | grep ${username}) + if [ -z "${find}" ]; then + su slurm -c "sacctmgr -i add user ${username} account=${account} cluster=${cluster}" || { echo "error to create user ${username}" >> ${log_file} && exit 1; } + fi + fi +done + + diff --git a/roles/slurm-provision/vars/readme.txt b/roles/slurm-provision/vars/readme.txt new file mode 100644 index 0000000000000000000000000000000000000000..5c0294c54811c2bc37e62769496f9d2d3bca4c5e --- /dev/null +++ b/roles/slurm-provision/vars/readme.txt @@ -0,0 +1 @@ +slurm_provision: "/usr/local/sbin/slurmu_provision.sh"