From 595d87ec892e8b46fd7cdd1d4f35c8f5d8fae223 Mon Sep 17 00:00:00 2001
From: Luhan Cheng <lche0021@student.monash.edu>
Date: Thu, 30 Jan 2020 12:59:11 +1100
Subject: [PATCH] linting on master playbook should not have very high
 serverity now

---
 .gitlab-ci.yml                                | 11 ++-
 CICD/ansiblelint/logdir/HIGH                  | 19 ++---
 CICD/ansiblelint/logdir/INFO                  | 20 ++---
 CICD/ansiblelint/logdir/VERY_HIGH             |  9 ---
 CICD/ansiblelint/logdir/logfile               | 47 +++++-------
 CICD/ansiblelint/run_lint.py                  | 75 +++++++++----------
 roles/gpu/tasks/main.yml                      | 11 ++-
 .../tasks/createSlurmDirectories.yml          |  2 +-
 .../tasks/installSlurmFromSource.yml          | 33 +++++---
 roles/slurmdb-config/tasks/main.yml           | 10 ++-
 10 files changed, 123 insertions(+), 114 deletions(-)
 delete mode 100644 CICD/ansiblelint/logdir/VERY_HIGH

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index c2398bda..b68e8b86 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -58,9 +58,18 @@ yamllint:
   script:
     - echo "stage yamllint"
     - cd CICD
-    - ansible-lint -c .yamllintconf.yaml -x ANSIBLE0002 master_playbook.yml
+    # - ansible-lint -c .yamllintconf.yaml -x ANSIBLE0002 master_playbook.yml
     - yamllint -c ./.yamllintheat.yaml ./heat
 
+ansiblelint:
+  stage: yamlint
+  tags: yamllint
+  script:
+    - echo "stage ansiblelint"
+    - cd CICD
+    - python ansiblelint/run_lint.py master_playbook.yml
+    
+
 build_cluster_cicd:
   stage: heat
   allow_failure: false
diff --git a/CICD/ansiblelint/logdir/HIGH b/CICD/ansiblelint/logdir/HIGH
index e71c428b..5ae8d024 100644
--- a/CICD/ansiblelint/logdir/HIGH
+++ b/CICD/ansiblelint/logdir/HIGH
@@ -8,23 +8,20 @@ plays/roles/config_repos/tasks/main.yml	77	E305	HIGH	Use shell only when shell f
 plays/roles/etcHosts/tasks/main.yml	13	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/etcHosts/tasks/main.yml	26	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/gpu/tasks/main.yml	56	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/gpu/tasks/main.yml	138	E301	HIGH	Commands should not change things if nothing needs doing
-plays/roles/gpu/tasks/main.yml	138	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/gpu/tasks/main.yml	148	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml	140	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml	145	E301	HIGH	Commands should not change things if nothing needs doing
+plays/roles/gpu/tasks/main.yml	145	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml	155	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/move_homedir/tasks/main.yml	9	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/nfs-client/meta/main.yml	2	E701	HIGH	No 'galaxy_info' found
 plays/roles/nfs-server/meta/main.yml	2	E701	HIGH	No 'galaxy_info' found
 plays/roles/slurm-common/tasks/installMungeFromSource.yml	22	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/installMungeFromSource.yml	46	E303	HIGH	systemctl used in place of systemd module
 plays/roles/slurm-common/tasks/installMungeFromSource.yml	46	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	1	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	6	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	37	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	51	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	64	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	77	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	96	E305	HIGH	Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	101	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml	41	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml	55	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml	68	E305	HIGH	Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml	81	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/main.yml	81	E305	HIGH	Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/main.yml	124	E601	HIGH	Don't compare to literal True/False
 plays/roles/slurm-common/tasks/main.yml	129	E601	HIGH	Don't compare to literal True/False
diff --git a/CICD/ansiblelint/logdir/INFO b/CICD/ansiblelint/logdir/INFO
index 1b741f36..226d1d3d 100644
--- a/CICD/ansiblelint/logdir/INFO
+++ b/CICD/ansiblelint/logdir/INFO
@@ -83,9 +83,8 @@ plays/roles/gpu/tasks/main.yml	84	E201	INFO	Trailing whitespace
 plays/roles/gpu/tasks/main.yml	88	E201	INFO	Trailing whitespace
 plays/roles/gpu/tasks/main.yml	93	E201	INFO	Trailing whitespace
 plays/roles/gpu/tasks/main.yml	115	E201	INFO	Trailing whitespace
-plays/roles/gpu/tasks/main.yml	133	E201	INFO	Trailing whitespace
-plays/roles/gpu/tasks/main.yml	152	E201	INFO	Trailing whitespace
-plays/roles/gpu/tasks/main.yml	168	E201	INFO	Trailing whitespace
+plays/roles/gpu/tasks/main.yml	159	E201	INFO	Trailing whitespace
+plays/roles/gpu/tasks/main.yml	175	E201	INFO	Trailing whitespace
 plays/roles/jasons_ssh_ca/tasks/main.yml	10	E201	INFO	Trailing whitespace
 plays/roles/ldapclient/handlers/main.yml	2	E201	INFO	Trailing whitespace
 plays/roles/ldapclient/tasks/installOpenLdap.yml	3	E201	INFO	Trailing whitespace
@@ -119,17 +118,20 @@ plays/roles/slurm-common/tasks/installCgroup.yml	14	E201	INFO	Trailing whitespac
 plays/roles/slurm-common/tasks/installCgroup.yml	15	E201	INFO	Trailing whitespace
 plays/roles/slurm-common/tasks/installMungeFromSource.yml	31	E201	INFO	Trailing whitespace
 plays/roles/slurm-common/tasks/installMungeFromSource.yml	33	E201	INFO	Trailing whitespace
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	3	E201	INFO	Trailing whitespace
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	8	E201	INFO	Trailing whitespace
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml	12	E201	INFO	Trailing whitespace
 plays/roles/slurm-common/tasks/main.yml	108	E201	INFO	Trailing whitespace
 plays/roles/slurm-common/tasks/main.yml	124	E201	INFO	Trailing whitespace
 plays/roles/slurm-common/tasks/main.yml	136	E201	INFO	Trailing whitespace
 plays/roles/slurm-start/tasks/main.yml	3	E201	INFO	Trailing whitespace
 plays/roles/slurm-start/tasks/main.yml	6	E201	INFO	Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml	33	E201	INFO	Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml	34	E201	INFO	Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml	44	E201	INFO	Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml	45	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	29	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	30	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	31	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	32	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	37	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	38	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	48	E201	INFO	Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml	49	E201	INFO	Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml	6	E201	INFO	Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml	9	E201	INFO	Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml	21	E201	INFO	Trailing whitespace
diff --git a/CICD/ansiblelint/logdir/VERY_HIGH b/CICD/ansiblelint/logdir/VERY_HIGH
deleted file mode 100644
index 4e0ae716..00000000
--- a/CICD/ansiblelint/logdir/VERY_HIGH
+++ /dev/null
@@ -1,9 +0,0 @@
-filepath	line	rule	serverity	rule description
-plays/roles/gpu/tasks/main.yml	133	E302	VERY_HIGH	chmod used in place of argument mode to file module
-plays/roles/slurm-common/tasks/createSlurmDirectories.yml	38	E103	VERY_HIGH	Deprecated sudo feature
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	1	E302	VERY_HIGH	rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	6	E302	VERY_HIGH	rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	96	E302	VERY_HIGH	rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml	101	E302	VERY_HIGH	ln used in place of argument state=link to file module
-plays/roles/slurmdb-config/tasks/main.yml	24	E103	VERY_HIGH	Deprecated sudo feature
-plays/roles/slurmdb-config/tasks/main.yml	28	E103	VERY_HIGH	Deprecated sudo feature
diff --git a/CICD/ansiblelint/logdir/logfile b/CICD/ansiblelint/logdir/logfile
index 0afa53d4..26b91206 100644
--- a/CICD/ansiblelint/logdir/logfile
+++ b/CICD/ansiblelint/logdir/logfile
@@ -116,13 +116,12 @@ plays/roles/gpu/tasks/main.yml:88: [E201] [INFO] Trailing whitespace
 plays/roles/gpu/tasks/main.yml:93: [E201] [INFO] Trailing whitespace
 plays/roles/gpu/tasks/main.yml:109: [E306] [MEDIUM] Shells that use pipes should set the pipefail option
 plays/roles/gpu/tasks/main.yml:115: [E201] [INFO] Trailing whitespace
-plays/roles/gpu/tasks/main.yml:133: [E201] [INFO] Trailing whitespace
-plays/roles/gpu/tasks/main.yml:133: [E302] [VERY_HIGH] chmod used in place of argument mode to file module
-plays/roles/gpu/tasks/main.yml:138: [E301] [HIGH] Commands should not change things if nothing needs doing
-plays/roles/gpu/tasks/main.yml:138: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/gpu/tasks/main.yml:148: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/gpu/tasks/main.yml:152: [E201] [INFO] Trailing whitespace
-plays/roles/gpu/tasks/main.yml:168: [E201] [INFO] Trailing whitespace
+plays/roles/gpu/tasks/main.yml:140: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml:145: [E301] [HIGH] Commands should not change things if nothing needs doing
+plays/roles/gpu/tasks/main.yml:145: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml:155: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/gpu/tasks/main.yml:159: [E201] [INFO] Trailing whitespace
+plays/roles/gpu/tasks/main.yml:175: [E201] [INFO] Trailing whitespace
 plays/roles/jasons_ssh_ca/handlers/main.yml:2: [E502] [MEDIUM] All tasks should be named
 plays/roles/jasons_ssh_ca/tasks/main.yml:2: [E502] [MEDIUM] All tasks should be named
 plays/roles/jasons_ssh_ca/tasks/main.yml:10: [E201] [INFO] Trailing whitespace
@@ -161,7 +160,6 @@ plays/roles/postfix/tasks/main.yml:12: [E201] [INFO] Trailing whitespace
 plays/roles/slurm-common/tasks/createSlurmDirectories.yml:15: [E201] [INFO] Trailing whitespace
 plays/roles/slurm-common/tasks/createSlurmDirectories.yml:25: [E201] [INFO] Trailing whitespace
 plays/roles/slurm-common/tasks/createSlurmDirectories.yml:27: [E201] [INFO] Trailing whitespace
-plays/roles/slurm-common/tasks/createSlurmDirectories.yml:38: [E103] [VERY_HIGH] Deprecated sudo feature
 plays/roles/slurm-common/tasks/createSlurmDirectories.yml:43: [E206] [LOW] Variables should have spaces before and after: {{ var_name }}
 plays/roles/slurm-common/tasks/createSlurmDirectories.yml:59: [E201] [INFO] Trailing whitespace
 plays/roles/slurm-common/tasks/installCgroup.yml:1: [E201] [INFO] Trailing whitespace
@@ -174,20 +172,11 @@ plays/roles/slurm-common/tasks/installMungeFromSource.yml:33: [E201] [INFO] Trai
 plays/roles/slurm-common/tasks/installMungeFromSource.yml:46: [E303] [HIGH] systemctl used in place of systemd module
 plays/roles/slurm-common/tasks/installMungeFromSource.yml:46: [E305] [HIGH] Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/installMungeFromSource.yml:46: [E503] [MEDIUM] Tasks that run when changed should likely be handlers
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:1: [E302] [VERY_HIGH] rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:1: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:3: [E201] [INFO] Trailing whitespace
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:6: [E302] [VERY_HIGH] rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:6: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:8: [E201] [INFO] Trailing whitespace
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:37: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:51: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:64: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:77: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:96: [E302] [VERY_HIGH] rm used in place of argument state=absent to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:96: [E305] [HIGH] Use shell only when shell functionality is required
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:101: [E302] [VERY_HIGH] ln used in place of argument state=link to file module
-plays/roles/slurm-common/tasks/installSlurmFromSource.yml:101: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml:12: [E201] [INFO] Trailing whitespace
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml:41: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml:55: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml:68: [E305] [HIGH] Use shell only when shell functionality is required
+plays/roles/slurm-common/tasks/installSlurmFromSource.yml:81: [E305] [HIGH] Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/main.yml:81: [E305] [HIGH] Use shell only when shell functionality is required
 plays/roles/slurm-common/tasks/main.yml:95: [E306] [MEDIUM] Shells that use pipes should set the pipefail option
 plays/roles/slurm-common/tasks/main.yml:108: [E201] [INFO] Trailing whitespace
@@ -210,12 +199,14 @@ plays/roles/slurm-start/tasks/main.yml:51: [E503] [MEDIUM] Tasks that run when c
 plays/roles/slurm-start/tasks/main.yml:66: [E301] [HIGH] Commands should not change things if nothing needs doing
 plays/roles/slurm-start/tasks/main.yml:66: [E305] [HIGH] Use shell only when shell functionality is required
 plays/roles/slurm-start/tasks/main.yml:67: [E206] [LOW] Variables should have spaces before and after: {{ var_name }}
-plays/roles/slurmdb-config/tasks/main.yml:24: [E103] [VERY_HIGH] Deprecated sudo feature
-plays/roles/slurmdb-config/tasks/main.yml:28: [E103] [VERY_HIGH] Deprecated sudo feature
-plays/roles/slurmdb-config/tasks/main.yml:33: [E201] [INFO] Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml:34: [E201] [INFO] Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml:44: [E201] [INFO] Trailing whitespace
-plays/roles/slurmdb-config/tasks/main.yml:45: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:29: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:30: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:31: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:32: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:37: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:38: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:48: [E201] [INFO] Trailing whitespace
+plays/roles/slurmdb-config/tasks/main.yml:49: [E201] [INFO] Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml:6: [E201] [INFO] Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml:9: [E201] [INFO] Trailing whitespace
 plays/roles/ssh-password-login/tasks/main.yml:21: [E201] [INFO] Trailing whitespace
diff --git a/CICD/ansiblelint/run_lint.py b/CICD/ansiblelint/run_lint.py
index 50490689..872f2cbb 100644
--- a/CICD/ansiblelint/run_lint.py
+++ b/CICD/ansiblelint/run_lint.py
@@ -4,12 +4,13 @@ import subprocess
 from pathlib import Path
 import re
 import sys
+import os
 from collections import defaultdict
 def parse_argument():
     parser = ArgumentParser("ansible lint runner with customized spec")
-    parser.add_argument('--spec', type=str, nargs='?', help="yaml file which defines warning and error rules")
-    parser.add_argument('targets', type=str, nargs='+', help="role or task to lint")
-    parser.add_argument('--logdir', type=Path, default=Path('./ansiblelint/logdir'), help='log directory default to ./ansiblelint/logdir')
+    parser.add_argument('--targets', type=str, nargs='*',
+                        help="path to roles or playbook targets")
+    parser.add_argument('--logdir', type=Path, default=Path( __file__ + '/../logdir').resolve(), nargs='?', help='log directory default to ./ansiblelint/logdir')
 
     args = parser.parse_args()
     
@@ -19,8 +20,10 @@ def parse_rule_output(line):
     # (filepath, line, rule, severity, rule_desc)
     expression = '(.*\.yml):([0-9]+): \[(.*)\] \[(.*)\] (.*$)'
     matched = re.match(expression, line)
+    # print(line)
     matched_groups = matched.groups()
     return matched_groups
+
 def group_by(output, idx):
     res = defaultdict(list)
     for i in output:
@@ -32,44 +35,40 @@ outputs = defaultdict()
 def main():
     exit_code = 0
     args = parse_argument()
-    if args.spec is not None:
-        with open(args.spec, 'r') as f:
-            spec = yaml.load(f)
-        for k,v in spec.items():
-            cmd = cmd_template + ' '.join(['-t ' + str(tag) for tag in v])
-            cmd += ' ' + ' '.join(args.targets)
-            logfile = args.logdir.joinpath(k)
-            cmd += ' 2>&1 | tee {}'.format(str(logfile.resolve()))
-            output = subprocess.check_output(cmd, shell=True)
-            output = output.decode().splitlines()
-            output = [parse_rule_output(line) for line in output]
-            outputs[k] = output
-            # outputs.append(output)
-    else:
-        cmd = cmd_template
+    for item in args.logdir.iterdir():
+        item.unlink()
+    cmd = cmd_template
+    if args.targets is not None:
         cmd += ' ' + ' '.join(args.targets)
-        logfile = args.logdir.joinpath('logfile')
-        cmd += ' 2>&1 | tee {}'.format(str(logfile.resolve()))
+    else:
+        rolenames = [str(i.resolve())
+                     for i in Path(__file__ + '/../../plays/roles').resolve().iterdir() if i.is_dir()]
+        cmd += ' ' + ' '.join(rolenames)
         # print(cmd)
-        output = subprocess.check_output(cmd, shell=True)
-        output = output.decode().splitlines()
-        output = [parse_rule_output(line) for line in output]
-
-        # group by serverity
-        output = group_by(output, 3)
-        # print(output.keys())
+    logfile = args.logdir.joinpath('logfile')
+    cmd += ' 2>&1 | tee {}'.format(str(logfile.resolve()))
+    # print(cmd)
+    output = subprocess.check_output(cmd, shell=True)
+    output = output.decode().splitlines()
+    # print(output)
+    output = [parse_rule_output(line) for line in output]
 
-        for k,v in output.items():
-            if (k == 'HIGH' or k=='VERY_HIGH') and len(v) != 0:
-                exit_code = 1
-            current_log = args.logdir.joinpath(k).resolve()
+    # group by serverity
+    output = group_by(output, 3)
+    # print(output.keys())
+    # print(output.keys())
+    for k,v in output.items():
+        # print(k, v)
+        if (k=='VERY_HIGH') and len(v) != 0:
+            exit_code = 1
+        current_log = args.logdir.joinpath(k).resolve()
 
-            with current_log.open(mode='w') as f:
-                f.writelines(['filepath\tline\trule\tserverity\trule description\n'])
-                # print(v[-1])
-                # return
-                f.writelines(['\t'.join(list(i)) + '\n' for i in v])
-        sys.exit(exit_code)
-    return
+        with current_log.open(mode='w') as f:
+            f.writelines(['filepath\tline\trule\tserverity\trule description\n'])
+            # print(v[-1])
+            # return
+            f.writelines(['\t'.join(list(i)) + '\n' for i in v])
+    sys.exit(exit_code)
+    # return
 if __name__ == "__main__":
     main()
diff --git a/roles/gpu/tasks/main.yml b/roles/gpu/tasks/main.yml
index 86eb7381..4bc7d9f4 100644
--- a/roles/gpu/tasks/main.yml
+++ b/roles/gpu/tasks/main.yml
@@ -130,8 +130,15 @@
   template: src=xserver.j2 dest=/etc/pam.d/xserver
   become: true
 
-- name: build nvidia driver 
-  shell: chmod 755 /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run; /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run --silent
+- name: chmod nvidia driver builder
+  file:
+    path: /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run
+    mode: 0755
+    become: true
+    when: install_driver
+
+- name: build nvidia driver
+  shell: /tmp/NVIDIA-Linux-x86_64-{{ nvidia_version }}.run
   become: true
   when: install_driver
 
diff --git a/roles/slurm-common/tasks/createSlurmDirectories.yml b/roles/slurm-common/tasks/createSlurmDirectories.yml
index 1f4aabac..73895682 100644
--- a/roles/slurm-common/tasks/createSlurmDirectories.yml
+++ b/roles/slurm-common/tasks/createSlurmDirectories.yml
@@ -37,7 +37,7 @@
 
 - name: create slurmdbdpiddir directory
   file: path={{ slurmdbdpiddir }} state=directory owner=slurm group=slurm mode=755
-  sudo: true
+  become: true
 
 - name: create shared state directory
   file: path={{slurmsharedstatedir }} state=directory owner=slurm group=slurm mode=750
diff --git a/roles/slurm-common/tasks/installSlurmFromSource.yml b/roles/slurm-common/tasks/installSlurmFromSource.yml
index 90816f18..071d0b8b 100644
--- a/roles/slurm-common/tasks/installSlurmFromSource.yml
+++ b/roles/slurm-common/tasks/installSlurmFromSource.yml
@@ -1,12 +1,16 @@
 - name: remove all install
-  shell: rm -rf /tmp/slurm-{{ slurm_version }}
-  become: true 
-  when: force_slurm_recompile is defined
+  file:
+    path: "/tmp/slurm-{{ slurm_version }}"
+    state: absent
+    become: true
+    when: force_slurm_recompile is defined
 
 - name: remove all install
-  shell: rm -rf {{ slurm_dir }}
-  become: true 
-  when: force_slurm_recompile is defined
+  file:
+    path: "{{ slurm_dir }}"
+    state: absent
+    become: true 
+    when: force_slurm_recompile is defined
 
 - name: unarchive slurm
   unarchive:
@@ -94,14 +98,19 @@
   become: true
 
 - name: remove exist-slurm-latest-link
-  shell: rm -f  /opt/slurm-latest
-  become: true
-  when: force_slurm_recompile is defined or not stat_srun.stat.exists
+  file:
+    path: /opt/slurm-latest
+    state: absent
+    become: true
+    when: force_slurm_recompile is defined or not stat_srun.stat.exists
 
 - name: put slurm-latest-link
-  shell: ln -s  {{ slurm_dir }}  /opt/slurm-latest
-  become: true
-  when: force_slurm_recompile is defined or not stat_srun.stat.exists
+  file:
+    src: "{{ slurm_dir }}"
+    dest: /opt/slurm-latest
+    state: link
+    become: true
+    when: force_slurm_recompile is defined or not stat_srun.stat.exists
 
 - name: add slurm log rotate config
   template: src=slurmlog.j2 dest=/etc/logrotate.d/slurm mode=644
diff --git a/roles/slurmdb-config/tasks/main.yml b/roles/slurmdb-config/tasks/main.yml
index 1a50bdaf..44ae06e5 100644
--- a/roles/slurmdb-config/tasks/main.yml
+++ b/roles/slurmdb-config/tasks/main.yml
@@ -23,11 +23,15 @@
 
 - name: create slurm group
   group: name=slurm system=yes gid=497
-  sudo: true
+  become: true
 
 - name: create slurm user # this is duplicated from slurm-common
-  user: name=slurm group=slurm system=yes createhome=no uid=497
-  sudo: true
+  user: 
+    name: slurm 
+    group: slurm 
+    system: yes 
+    createhome: no uid=497
+  become: true
 
 - name: install slurmdb.conf
   copy: 
-- 
GitLab