Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds Goslmailer install to allow for SLURM notifications #109

Merged
merged 1 commit into from
Jun 15, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion playbooks/README.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
## Nix

To install the Nix package manager run the install_nix.yml playbook.

To remove the Nix package manager run the uninstall_nix.yml playbook.
Both playbooks are idempotent. If you get an error running the uninstall_nix.yml playbook rerun the playbook.

Both playbooks are idempotent. If you get an error running the uninstall_nix.yml playbook rerun the playbook.

## Goslmailer
To install goslmailer run the goslmailer_install.yml and enter the slack_bot_token from the [slack bot app](https://app.slack.com/app-settings/T04PVJTPVCJ/A05AGQ7HNBX) (OAuth & Permissions -> OAuth Tokens for Your Workspace -> Bot User OAuth Token). Followed by the app password for the notification email ([email protected]). This is generated by the following steps:
1. Enable 2fa for the account [https://myaccount.google.com/security](https://myaccount.google.com/security). Make sure you select the do-not-reply account on the login screen or change to it in the top right corner.
1. Now go to: [https://myaccount.google.com/apppasswords](https://myaccount.google.com/apppasswords). Again ensure you are on the correct account.
1. Press the "select app" dropdown and select "other". Then enter any name you like such as "CAIS Notifications". This will only be used here but should be recognizable.
1. Press "Generate" in the bottom right and copy this password (Copy this into terminal window when prompted).

To uninstall goslmailer run goslmailer_uninstall.yml. Note that this does not remove the MailProg entry from the slurm.conf. This won't cause problems but will be silently erroring in the slurmctld.log. So if you want to be clean you can remove that from the config.
137 changes: 137 additions & 0 deletions playbooks/goslmailer_install.yml
rumiah-safe marked this conversation as resolved.
Show resolved Hide resolved
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
- name: Download and unpack from github as well as get user prompt
hosts: bastion
become: true
vars_prompt:
- name: slack_bot_token
prompt: "Enter the slack bot token"
- name: app_password
prompt: "Enter the app password for the email account"
tasks:
- name: Include a role dynamically
include_role:
name: goslmailer

- name: Copy binaries
copy:
src: /tmp/goslmailer/goslmailer
dest: /bin
owner: slurm
group: slurm
mode: '0770'

- copy:
src: /tmp/goslmailer/gobler
dest: /bin
owner: slurm
group: slurm
mode: '0770'

- name: Create slack directory
file:
path: /var/spool/slack
steven-safeai marked this conversation as resolved.
Show resolved Hide resolved
state: directory
owner: slurm
group: slurm
mode: '0770'

- name: Copy Notification templates
copy:
src: "/tmp/goslmailer/notification_templates"
dest: /etc/slurm/
mode: '0744'
owner: slurm
group: slurm

- name: Copy goslmailer.conf
copy:
src: "/tmp/goslmailer/goslmailer.conf"
dest: /etc/slurm/goslmailer.conf
mode: '0600'
owner: slurm
group: slurm

- name: Copy gobler.conf
copy:
src: "/tmp/goslmailer/gobler.conf"
dest: /etc/slurm/gobler.conf
mode: '0600'
owner: slurm
group: slurm

- name: Copy gobler.service
copy:
src: "/tmp/goslmailer/gobler.service"
dest: /etc/systemd/system/
mode: '0644'
owner: root
group: root

- name: Reload systemd daemon
rumiah-safe marked this conversation as resolved.
Show resolved Hide resolved
systemd:
daemon_reload: yes

- name: Disable gobler service
systemd:
name: gobler
enabled: false

- name: Install mutt
steven-safeai marked this conversation as resolved.
Show resolved Hide resolved
vars:
package_name:
- mutt
include_role:
name: safe_yum

- name: Copy Muttrc.local
copy:
src: "/tmp/goslmailer/Muttrc.local"
dest: /etc/Muttrc.local
mode: '0600'

- name: Restart postfix service
systemd:
name: postfix
state: restarted
enabled: yes

- name: Create goslmailer.log
file:
path: /data/spool/goslmailer.log
state: touch
mode: '0600'
owner: slurm
group: slurm

- name: Set ownership and permissions for spool
file:
path: "{{ item.path }}"
state: directory
mode: "{{ item.mode }}"
owner: root
group: root
loop:
- { path: '/var/spool/postfix', mode: '0755'}
- { path: '/var/spool/mail', mode: '0755'}
rumiah-safe marked this conversation as resolved.
Show resolved Hide resolved

- name: Set ownership and permissions for Muttrc
file:
path: "{{ item.path }}"
state: file
mode: "{{ item.mode }}"
owner: slurm
group: slurm
loop:
- { path: '/etc/Muttrc', mode: '0600'}
- { path: '/etc/Muttrc.local', mode: '0600'}

- name: Edit config files
replace:
path: "{{ item.path }}"
regexp: "{{ item.regex }}"
replace: "{{ item.new }}"
loop:
- { path: '/etc/slurm/goslmailer.conf', regex: "\\$SLACK_BOT_TOKEN", new: "{{ slack_bot_token }}"}
- { path: '/etc/slurm/gobler.conf', regex: "\\$SLACK_BOT_TOKEN", new: "{{ slack_bot_token }}"}
- { path: '/etc/Muttrc.local', regex: "\\$EMAIL_ADDRESS", new: "[email protected]"}
- { path: '/etc/Muttrc.local', regex: "\\$PLAIN_TEXT_NAME", new: "CAIS Notifications"}
- { path: '/etc/Muttrc.local', regex: "\\$APP_PASSWORD", new: "{{ app_password }}"}
54 changes: 54 additions & 0 deletions playbooks/goslmailer_uninstall.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
- name: Uninstall goslmailer
hosts: bastion
become: true
tasks:
- name: Remove goslmailer binary
file:
path: /bin/goslmailer
state: absent

- name: Remove gobler binary
file:
path: /bin/gobler
state: absent

- name: Remove slack directory
file:
path: /var/spool/slack
state: absent

- name: Remove notification_templates directory
file:
path: /etc/slurm/notification_templates
state: absent

- name: Remove goslmailer.log file
file:
path: /var/log/goslmailer.log
state: absent

- name: Remove goslmailer.conf file
file:
path: /etc/slurm/goslmailer.conf
state: absent

- name: Remove gobler.conf file
file:
path: /etc/slurm/gobler.conf
state: absent

- name: Stop gobler service
systemd:
name: gobler
state: stopped
enabled: false
ignore_errors: True

- name: Remove gobler.service file
file:
path: /etc/systemd/system/gobler.service
state: absent

- name: Reload systemd daemon
systemd:
daemon_reload: true
2 changes: 2 additions & 0 deletions playbooks/roles/goslmailer/defaults/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
goslmailer_version: v2.7.1.1
download_checksum: sha512:9e48c639889c76278d4dd4874a5110c924fe2ea1784d1a11e74ef6a99371f6a8843fff376cc81a8b1fcf5fac335b19b5801fa9d373153f3378e4752c86cd3b2f
16 changes: 16 additions & 0 deletions playbooks/roles/goslmailer/tasks/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
- name: Download and unpack files
block:
- name: Download zip
get_url:
url: "{{ download_path }}"
dest: /tmp
checksum: "{{ download_checksum }}"
- name: Create temp directory
file:
path: /tmp/goslmailer
state: directory
- name: Extract installer files
unarchive:
src: /tmp/goslmailer-{{ goslmailer_version }}.zip
remote_src: false
dest: /tmp/goslmailer/
1 change: 1 addition & 0 deletions playbooks/roles/goslmailer/vars/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
download_path: "https://github.com/centerforaisafety/goslmailer/releases/download/{{ goslmailer_version }}/goslmailer-{{ goslmailer_version }}.zip"
1 change: 1 addition & 0 deletions playbooks/roles/slurm/templates/slurm.conf.j2
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ CommunicationParameters=NoAddrCache
TopologyPlugin=topology/tree
TreeWidth=2048
SlurmctldParameters=enable_configless
MailProg=/bin/goslmailer
steven-safeai marked this conversation as resolved.
Show resolved Hide resolved

{% if sacct_limits|bool %}
AccountingStorageTRES=gres/gpu
Expand Down