From ef04c4b4c38b33a3d13b352e3e5b54feb4b4cd97 Mon Sep 17 00:00:00 2001
From: Chris Hines <chris.hines@monash.edu>
Date: Wed, 19 Aug 2015 00:13:06 +0000
Subject: [PATCH] updates to the slurm roles. Work with CentOS 7

---
 .../tasks/installMungeFromSource.yml          | 12 +++++
 .../tasks/installSlurmFromSource.yml          |  5 --
 roles/slurm-common/tasks/main.yml             |  5 --
 roles/slurm-common/templates/munge.service.j2 | 17 ++++++
 roles/slurm-start/tasks/main.yml              | 53 +++++++++++++++++--
 .../templates/slurm.initd.j2                  |  0
 .../templates/slurmctld.service.j2            | 12 +++++
 roles/slurm-start/templates/slurmd.service.j2 | 13 +++++
 .../templates/slurmdbd.initd.j2               |  0
 .../slurm-start/templates/slurmdbd.service.j2 | 13 +++++
 roles/slurmdb-config/tasks/main.yml           |  6 +--
 11 files changed, 120 insertions(+), 16 deletions(-)
 create mode 100644 roles/slurm-common/templates/munge.service.j2
 rename roles/{slurm-common => slurm-start}/templates/slurm.initd.j2 (100%)
 create mode 100644 roles/slurm-start/templates/slurmctld.service.j2
 create mode 100644 roles/slurm-start/templates/slurmd.service.j2
 rename roles/{slurmdb-config => slurm-start}/templates/slurmdbd.initd.j2 (100%)
 create mode 100644 roles/slurm-start/templates/slurmdbd.service.j2

diff --git a/roles/slurm-common/tasks/installMungeFromSource.yml b/roles/slurm-common/tasks/installMungeFromSource.yml
index 438497c..aec3033 100644
--- a/roles/slurm-common/tasks/installMungeFromSource.yml
+++ b/roles/slurm-common/tasks/installMungeFromSource.yml
@@ -26,3 +26,15 @@
 - name: copy init script
   template: dest=/etc/init.d/munge src=munge.initd.j2 mode=755
   sudo: true
+
+- name:  copy slurm init script if OS contains systemd
+  template: dest=/etc/systemd/system/munge.service src=munge.service.j2 mode=755
+  sudo: true
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7")
+
+- name: reload systemd
+  shell: systemctl daemon-reload
+  sudo: true
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7")
diff --git a/roles/slurm-common/tasks/installSlurmFromSource.yml b/roles/slurm-common/tasks/installSlurmFromSource.yml
index a172b99..95d5fc9 100644
--- a/roles/slurm-common/tasks/installSlurmFromSource.yml
+++ b/roles/slurm-common/tasks/installSlurmFromSource.yml
@@ -32,8 +32,3 @@
   args:
     chdir: /tmp/slurm-{{ slurm_version }}
     creates: "{{ slurm_dir }}/bin/srun"
-
-- name: copy init script
-  template: dest=/etc/init.d/slurm src=slurm.initd.j2  mode=755
-  sudo: true   
-
diff --git a/roles/slurm-common/tasks/main.yml b/roles/slurm-common/tasks/main.yml
index a7c5e16..a75f57a 100644
--- a/roles/slurm-common/tasks/main.yml
+++ b/roles/slurm-common/tasks/main.yml
@@ -99,15 +99,11 @@
 - name: install munge key
   template: src=munge_key.j2 dest={{ munge_dir }}/etc/munge/munge.key owner=munge mode=600
   sudo: true
-  notify: restart munge
 
 - name: enable munge on boot
   service: name=munge enabled=yes
   sudo: true
 
-- name: start munge
-  service: name=munge state=started
-  sudo: true
 
 - include: installSlurmFromSource.yml
 
@@ -130,7 +126,6 @@
 - name: install slurm.conf
   copy: src=files/slurm.conf dest={{ slurm_dir }}/etc/slurm.conf
   sudo: true
-  notify: restart slurm
   when: slurm_use_vpn==False 
 
 - name: install slurm.conf
diff --git a/roles/slurm-common/templates/munge.service.j2 b/roles/slurm-common/templates/munge.service.j2
new file mode 100644
index 0000000..2e73014
--- /dev/null
+++ b/roles/slurm-common/templates/munge.service.j2
@@ -0,0 +1,17 @@
+[Unit]
+Description=MUNGE authentication service
+Documentation=man:munged(8)
+After=network.target
+After=syslog.target
+After=time-sync.target
+
+[Service]
+Type=forking
+ExecStart={{ munge_dir }}/sbin/munged
+PIDFile={{ munge_dir }}/var/run/munge/munged.pid
+User=munge
+Group=munge
+Restart=on-abort
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurm-start/tasks/main.yml b/roles/slurm-start/tasks/main.yml
index 29f3bc2..4e642e8 100644
--- a/roles/slurm-start/tasks/main.yml
+++ b/roles/slurm-start/tasks/main.yml
@@ -1,13 +1,60 @@
 ---
+- name: set use_systemd
+  set_fact: 
+    use_systemd: True
+  when: (ansible_distribution == "CentOS" or ansible_distribution == "RedHat") and
+          ( ansible_distribution_major_version == "7") 
+
+- name: install slurmdbd init
+  template: src=slurmdbd.initd.j2 dest=/etc/init.d/slurmdbd mode=755
+  sudo: true
+  when: use_systemd is not defined and start_slurmdbd is defined
+
+- name:  copy slurmdbd init script if OS contains systemd
+  template: dest=/etc/systemd/system/slurmdbd.service src=slurmdbd.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmdbd is defined
+
+- name: copy slurm init script
+  template: dest=/etc/init.d/slurm src=slurm.initd.j2  mode=755
+  sudo: true
+  when: use_systemd is not defined
+
+- name:  copy slurmd.service
+  template: dest=/etc/systemd/system/slurmd.service src=slurmd.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmd is defined
+
+- name: slurmctld.service
+  template: dest=/etc/systemd/system/slurmctld.service src=slurmctld.service.j2 mode=755
+  sudo: true
+  when: use_systemd is defined and start_slurmctld is defined
+
+- name: reload systemd
+  shell: systemctl daemon-reload
+  sudo: true
+  when: use_systemd is defined
+
 - name: start munge
   service: name=munge state=started
   sudo: true
 
 - name: start slurmdbd
-  service: name=slurmdbd state=started
+  service: name=slurmdbd state=started enabled=yes
+  sudo: true
+  when: start_slurmdbd is defined
+
+- name: start slurmctl
+  service: name=slurmctld state=started enabled=yes
+  sudo: true
+  when: use_systemd is defined and start_slurmctld is defined
+
+- name: start slurmd
+  service: name=slurmd state=started enabled=yes
   sudo: true
-  ignore_errors: true
+  when: use_systemd is defined and start_slurmd is defined
 
 - name: start slurm
-  service: name=slurm state=started
+  service: name=slurm state=started enabled=yes
   sudo: true
+  when: use_systemd is not defined and ( start_slurmd is defined or start_slurmctld is defined )
diff --git a/roles/slurm-common/templates/slurm.initd.j2 b/roles/slurm-start/templates/slurm.initd.j2
similarity index 100%
rename from roles/slurm-common/templates/slurm.initd.j2
rename to roles/slurm-start/templates/slurm.initd.j2
diff --git a/roles/slurm-start/templates/slurmctld.service.j2 b/roles/slurm-start/templates/slurmctld.service.j2
new file mode 100644
index 0000000..226bc4d
--- /dev/null
+++ b/roles/slurm-start/templates/slurmctld.service.j2
@@ -0,0 +1,12 @@
+[Unit]
+Description=Slurm controller daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurm.conf
+
+[Service]
+Type=forking
+#EnvironmentFile=/etc/default/slurmctld
+ExecStart={{ slurm_dir }}/sbin/slurmctld $SLURMCTLD_OPTIONS
+PIDFile={{ slurmpiddir }}/slurmctld.pid
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurm-start/templates/slurmd.service.j2 b/roles/slurm-start/templates/slurmd.service.j2
new file mode 100644
index 0000000..d291736
--- /dev/null
+++ b/roles/slurm-start/templates/slurmd.service.j2
@@ -0,0 +1,13 @@
+[Unit]
+Description=Slurm node daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurm.conf
+
+[Service]
+Type=forking
+#EnvironmentFile=/etc/default/slurmd
+ExecStart={{ slurm_dir }}/sbin/slurmd $SLURMD_OPTIONS
+PIDFile={{ slurmpiddir }}/slurmd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurmdb-config/templates/slurmdbd.initd.j2 b/roles/slurm-start/templates/slurmdbd.initd.j2
similarity index 100%
rename from roles/slurmdb-config/templates/slurmdbd.initd.j2
rename to roles/slurm-start/templates/slurmdbd.initd.j2
diff --git a/roles/slurm-start/templates/slurmdbd.service.j2 b/roles/slurm-start/templates/slurmdbd.service.j2
new file mode 100644
index 0000000..d27b275
--- /dev/null
+++ b/roles/slurm-start/templates/slurmdbd.service.j2
@@ -0,0 +1,13 @@
+
+[Unit]
+Description=Slurm DBD accounting daemon
+After=network.target
+ConditionPathExists={{ slurm_dir }}/etc/slurmdbd.conf
+
+[Service]
+Type=forking
+ExecStart={{ slurm_dir }}/sbin/slurmdbd
+PIDFile=/var/run/slurmdbd.pid
+
+[Install]
+WantedBy=multi-user.target
diff --git a/roles/slurmdb-config/tasks/main.yml b/roles/slurmdb-config/tasks/main.yml
index 71c0b92..aa3323f 100644
--- a/roles/slurmdb-config/tasks/main.yml
+++ b/roles/slurmdb-config/tasks/main.yml
@@ -17,11 +17,11 @@
     - python-mysqldb
   when: ansible_os_family == "Debian"
 
-- name: install slurmdbd init
-  template: src=slurmdbd.initd.j2 dest=/etc/init.d/slurmdbd mode=755
+- name: make sure config dir exists
+  file: path="{{ slurm_dir }}/etc" state=directory
   sudo: true
 
-- name: install slurmdb.conf init
+- name: install slurmdb.conf
   template: src=slurmdbd.conf.j2 dest={{ slurm_dir }}/etc/slurmdbd.conf
   sudo: true
   when: slurm_dir is defined
-- 
GitLab