From 39ce2637dec3d3fa08e6cf3a70c4499bf0924b4e Mon Sep 17 00:00:00 2001 From: "Simon Michnowicz (Monash University)" <smichnow@m3-mgmt1.massive.org.au> Date: Thu, 11 May 2017 13:46:11 +1000 Subject: [PATCH] Added new role to enable Slurm DB SQL to be backed up and then ssh to a node. Location of node, backup dir, and dummy user account are contained in defaults/main.yml Both SQL nodes and Management node need to have this role applied, with 'server' parameter determining the different Former-commit-id: ca6e0cd5fa86efbe6a4816b3bad109d5f85214cd --- roles/slurm_sql_bk/defaults/main.yml | 6 +++ roles/slurm_sql_bk/files/id_rsa | 27 +++++++++++++ roles/slurm_sql_bk/files/id_rsa.pub | 1 + roles/slurm_sql_bk/tasks/main.yml | 40 +++++++++++++++++++ .../templates/backup_mysql_for_slurm.sh.j2 | 17 ++++++++ .../templates/delete_old_mysql_bk.sh.j2 | 11 +++++ roles/slurm_sql_bk/templates/mysql.conf.j2 | 3 ++ 7 files changed, 105 insertions(+) create mode 100644 roles/slurm_sql_bk/defaults/main.yml create mode 100644 roles/slurm_sql_bk/files/id_rsa create mode 100644 roles/slurm_sql_bk/files/id_rsa.pub create mode 100644 roles/slurm_sql_bk/tasks/main.yml create mode 100644 roles/slurm_sql_bk/templates/backup_mysql_for_slurm.sh.j2 create mode 100644 roles/slurm_sql_bk/templates/delete_old_mysql_bk.sh.j2 create mode 100644 roles/slurm_sql_bk/templates/mysql.conf.j2 diff --git a/roles/slurm_sql_bk/defaults/main.yml b/roles/slurm_sql_bk/defaults/main.yml new file mode 100644 index 00000000..efd65628 --- /dev/null +++ b/roles/slurm_sql_bk/defaults/main.yml @@ -0,0 +1,6 @@ +--- +# for slurm mysql backup +SQL_BK_DIR: "/mnt/db_backup" +SQL_BK_DEST_HOST: "m3-mgmt1" +SQL_BK_DEST_DIR: "/mnt/home/slurm_db_backup" +SQL_USER: "slurmsqlbk" diff --git a/roles/slurm_sql_bk/files/id_rsa b/roles/slurm_sql_bk/files/id_rsa new file mode 100644 index 00000000..6d48e8ae --- /dev/null +++ b/roles/slurm_sql_bk/files/id_rsa @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEpAIBAAKCAQEAp6+p7UzisLHTb7P4b2V3tvAtVDNuDV5gMiu+vyNPT/ihjgMo +BXgz5fuBMlv+1fsmiBAvZBzJD7m5+PkeQ2vXKGywGvUX6OHAppY6AtYf6T9b7gU6 +R1JgXTwu3HTNgtUZ87NvkxbS3jggL40Q6v+MJyXWfS76oBKp8lDVzS27wFDlrMYd +OdFKeV+KNV68rKziBhTIVQ2B5bq3OhDXISR1jOKHPPEeZVtX9Qmkm10n+0UstyQ6 +UpzOMabY4BiHJh6lrOrnsJ7nAB1sezz8tqLSKvD9Z9i9VlI2aBXgPmNEdqario7F +v5afAsGxVyngXnXqxtKU4e7xGSQ2JlEeYJBGgQIDAQABAoIBAQCLWgluQknVK0KZ +/scD1CADsF8LLV5Uz8xDhWUUNMTRob6oZOkaeoUup677acZCj1+7DTBFE0LnxaHO +TUCgKPt6BbDoBiyjhRBzoD5/YvDMBrJgAIopAUVB1iTfYlXzVyMlCkY7x2jf8WaV +/bZEhLA1TFWOXL88zaXb0N+MjmgL7hY3yP/i8+6dbDUkPsqnatLPYCNfqxzp+rOZ +XXCg8DQnfKu32ZyEiBfPqa/DOrLV0f4J+dSA3n/ygjisyzvUe3165AYHGH7ORfyS +yCPJnIge1Nf1wzmpB9vOf5/Rw+cICBAhzx78rgYqFJ1uTHNuiL3KLC+9LCkGojmY +hWgVwHzRAoGBANJ4NGBe/SHHc1bQja4iv9gEqaSkxhdHjic9/nW/fp/9p9T7GuDv +5Qjlos5GdFZp9nMURpeyJstDL/Mq6hWYnT24qS/qVr5CSLsgkE/mF+/0shiF4Fe/ +GPCPUwdwLMSNAz3r9Uir6QSpqfJFqPmmdoLtE12P/E0rkj04HFhDlRVFAoGBAMv2 +HkStzKUeYHChBl1s3ZZxvsG2q1XuSRPI3qbvzwOq5GZmJ9aEv/LxLiSragYju1C6 +LQTKzD3q0iCTcmF6hNee48GotEnbcc909yVpBfOogQ3BPraibVhWKX+Pp/NN1R7X +PRkDzgD3rpEi1twEEs6783KiHUDrPzvzVsnBW4oNAoGAFYeWVAVjf4EXm1naJGYJ +md9gOydf3CHFuN3umbztBxC7il3lcf0YQMC81rz+SZitTThVwE7JCSHmVcmeCHeE +Hjw1kmE2XmAJcJr0KDgxWqp9TWTkfhVeR71hkPE4oyKJolvwy25Kd9+jMtVNY7xT +gzEdOgTwmjRK0VhcDetb5MECgYBteFjAlePbz9UFPnfzFuZLxBsVT5zgTzerxckz +Ik0i88sI5tWE/tUjaK1Sgyoxx2XXK0XUZ6B9rxY+48SlayP3stEddRXm+kA4j9fC +nX7TS2KQ5mJplf5IRl6Zl5oWLXUwy2eAkJk1zbpFLcTSa+FIUnqU0UwQNvNGkxHG +0d/21QKBgQDMX+rScehbymOj7Lq+eBKoaDPC4cIzxBBXCKZFDxdmd14rGkvceRGN +BYYo6iWReDhX6P5BnSSaq4ZHCYL1fSVxnVRTuk6F2IOMU7ZeYlxPQDFvqpB8R+RB +gp/bUuCFRYNpSlEb/GSPvVsl7M6irmdgsAPQTyq5VAxUb9Z0DtrcGw== +-----END RSA PRIVATE KEY----- diff --git a/roles/slurm_sql_bk/files/id_rsa.pub b/roles/slurm_sql_bk/files/id_rsa.pub new file mode 100644 index 00000000..aa5bb0c5 --- /dev/null +++ b/roles/slurm_sql_bk/files/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCnr6ntTOKwsdNvs/hvZXe28C1UM24NXmAyK76/I09P+KGOAygFeDPl+4EyW/7V+yaIEC9kHMkPubn4+R5Da9cobLAa9Rfo4cCmljoC1h/pP1vuBTpHUmBdPC7cdM2C1Rnzs2+TFtLeOCAvjRDq/4wnJdZ9LvqgEqnyUNXNLbvAUOWsxh050Up5X4o1XrysrOIGFMhVDYHlurc6ENchJHWM4oc88R5lW1f1CaSbXSf7RSy3JDpSnM4xptjgGIcmHqWs6uewnucAHWx7PPy2otIq8P1n2L1WUjZoFeA+Y0R2pquKjsW/lp8CwbFXKeBederG0pTh7vEZJDYmUR5gkEaB root@m3-sql0 diff --git a/roles/slurm_sql_bk/tasks/main.yml b/roles/slurm_sql_bk/tasks/main.yml new file mode 100644 index 00000000..1bfd3276 --- /dev/null +++ b/roles/slurm_sql_bk/tasks/main.yml @@ -0,0 +1,40 @@ +--- +# this code is for the sql server only + - name: template sql backupscript to /etc/cron.daily + template: src="backup_mysql_for_slurm.sh.j2" dest="/etc/cron.daily/backup_mysql_for_slurm.sh" mode="700" + sudo: true + when: server == 'True' + - name: Create directory {{ SQL_BK_DIR }} + file: path={{ SQL_BK_DIR }} state=directory + sudo: true + when: server == 'True' + - name: template mysql config file to server + template: src="mysql.conf.j2" dest="{{ SQL_BK_DIR }}/mysql.conf" mode="600" + sudo: true + when: server == 'True' + - name: copy ssh pub key to .ssh if it does not exist already + copy: src="id_rsa.pub" dest="/root/.ssh/id_rsa.pub" + sudo: true + when: server == 'True' + - name: copy ssh private key to .ssh if it does not exist already + copy: src="id_rsa" dest="/root/.ssh/id_rsa" mode="600" + sudo: true + when: server == 'True' + +#this code is for the Destination Node only + - name: create dummy user account + user: name="{{ SQL_USER }}" comment="Account for scp of slurm sql backups" + sudo: true + when: server == 'False' + - name: Add MySQL server ssh key to authorised_files on management nodes" + authorized_key: user="{{ SQL_USER }}" state=present key="{{ lookup('file', 'id_rsa.pub') }}" #" + sudo: true + when: server == 'False' + - name: ensure the dest directory exists (for backups to be copied too) + file: path={{ SQL_BK_DEST_DIR }} state=directory owner={{ SQL_USER }} + sudo: true + when: server == 'False' + - name: setup cron job to delete old slurm logs + template: src="delete_old_mysql_bk.sh.j2" dest="/etc/cron.daily/delete_old_mysql_bk.sh" mode="700" + sudo: true + when: server == 'False' diff --git a/roles/slurm_sql_bk/templates/backup_mysql_for_slurm.sh.j2 b/roles/slurm_sql_bk/templates/backup_mysql_for_slurm.sh.j2 new file mode 100644 index 00000000..8b5c9cdc --- /dev/null +++ b/roles/slurm_sql_bk/templates/backup_mysql_for_slurm.sh.j2 @@ -0,0 +1,17 @@ +#!/bin/sh +# +# mysql dump for slurm. +# S.Michnowicz +# 20/Jan/2016 +# + +TIME=$(date '+%y-%m-%d') +DIR={{ SQL_BK_DIR }} +NAME="$DIR/mysql_dump_20${TIME}.sql" + +sudo mysqldump --defaults-file=$DIR/mysql.conf slurm_acct_db > $NAME +sudo chmod go-r $NAME +sudo gzip -f $NAME +#scp file to dummy user @ Destination Node and Directory +scp ${NAME}.gz {{ SQL_USER }}@{{ SQL_BK_DEST_HOST }}:{{ SQL_BK_DEST_DIR }} +rm -f ${NAME}.gz diff --git a/roles/slurm_sql_bk/templates/delete_old_mysql_bk.sh.j2 b/roles/slurm_sql_bk/templates/delete_old_mysql_bk.sh.j2 new file mode 100644 index 00000000..6f012295 --- /dev/null +++ b/roles/slurm_sql_bk/templates/delete_old_mysql_bk.sh.j2 @@ -0,0 +1,11 @@ +#!/bin/sh +# +# delete old backups from slurm mysql +# S.Michnowicz +# + +# 2 day timeframe specified by -mtime +2 +# also includes email check +#find {{ SQL_BK_DEST_DIR }} -type f -mtime +2 -name 'mysql_dump_*.gz' -execdir mail -s "Deleting {}" simon.michnowicz@monash.edu < /dev/null \; -execdir rm -f {} \; +find {{ SQL_BK_DEST_DIR }} -type f -mtime +7 -name 'mysql_dump_*.gz' -execdir rm -f {} \; + diff --git a/roles/slurm_sql_bk/templates/mysql.conf.j2 b/roles/slurm_sql_bk/templates/mysql.conf.j2 new file mode 100644 index 00000000..ea91192c --- /dev/null +++ b/roles/slurm_sql_bk/templates/mysql.conf.j2 @@ -0,0 +1,3 @@ +[client] +password="{{ sqlrootPasswd }}" +user=root -- GitLab