|
|
21ab4e |
From 8e91bc133859373acbb1ffdbd99849f160ae1193 Mon Sep 17 00:00:00 2001
|
|
|
21ab4e |
From: Avra Sengupta <asengupt@redhat.com>
|
|
|
21ab4e |
Date: Wed, 16 Nov 2016 16:19:14 +0530
|
|
|
21ab4e |
Subject: [PATCH 338/361] snapshot/scheduler: Set sebool
|
|
|
21ab4e |
cron_system_cronjob_use_shares to on
|
|
|
21ab4e |
|
|
|
21ab4e |
Rhel 7.1 onwards, the user has to manually set the
|
|
|
21ab4e |
selinux boolean 'cron_system_cronjob_use_shares' as
|
|
|
21ab4e |
on, if selinux is enabled for snapshot scheduler to
|
|
|
21ab4e |
work.
|
|
|
21ab4e |
|
|
|
21ab4e |
With this fix, we are automating that bit, in init step
|
|
|
21ab4e |
of snapshot scheduler
|
|
|
21ab4e |
|
|
|
21ab4e |
mainline:
|
|
|
21ab4e |
> BUG: 1395643
|
|
|
21ab4e |
> Reviewed-on: https://review.gluster.org/15857
|
|
|
21ab4e |
> Smoke: Gluster Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
|
|
|
21ab4e |
> Reviewed-by: Aravinda VK <avishwan@redhat.com>
|
|
|
21ab4e |
(cherry picked from commit d592aee0bba98df44865e75fb0f1fceef14acf05)
|
|
|
21ab4e |
|
|
|
21ab4e |
BUG: 1247056
|
|
|
21ab4e |
Change-Id: I5c1d23c14133c64770e84a77999ce647526f6711
|
|
|
21ab4e |
Signed-off-by: Avra Sengupta <asengupt@redhat.com>
|
|
|
21ab4e |
Reviewed-on: https://code.engineering.redhat.com/gerrit/101319
|
|
|
21ab4e |
Tested-by: Milind Changire <mchangir@redhat.com>
|
|
|
21ab4e |
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
21ab4e |
---
|
|
|
21ab4e |
extras/snap_scheduler/snap_scheduler.py | 90 +++++++++++++++++++++++++++++++++
|
|
|
21ab4e |
1 file changed, 90 insertions(+)
|
|
|
21ab4e |
|
|
|
21ab4e |
diff --git a/extras/snap_scheduler/snap_scheduler.py b/extras/snap_scheduler/snap_scheduler.py
|
|
|
21ab4e |
index b426cc7..61d1c51 100755
|
|
|
21ab4e |
--- a/extras/snap_scheduler/snap_scheduler.py
|
|
|
21ab4e |
+++ b/extras/snap_scheduler/snap_scheduler.py
|
|
|
21ab4e |
@@ -545,8 +545,98 @@ def edit_schedules(jobname, schedule, volname):
|
|
|
21ab4e |
|
|
|
21ab4e |
return ret
|
|
|
21ab4e |
|
|
|
21ab4e |
+def get_bool_val():
|
|
|
21ab4e |
+ getsebool_cli = ["getsebool",
|
|
|
21ab4e |
+ "-a"]
|
|
|
21ab4e |
+ p1 = subprocess.Popen(getsebool_cli, stdout=subprocess.PIPE,
|
|
|
21ab4e |
+ stderr=subprocess.PIPE)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ grep_cmd = ["grep",
|
|
|
21ab4e |
+ "cron_system_cronjob_use_shares"]
|
|
|
21ab4e |
+ p2 = subprocess.Popen(grep_cmd, stdin=p1.stdout,
|
|
|
21ab4e |
+ stdout=subprocess.PIPE,
|
|
|
21ab4e |
+ stderr=subprocess.PIPE)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ p1.stdout.close()
|
|
|
21ab4e |
+ output, err = p2.communicate()
|
|
|
21ab4e |
+ rv = p2.returncode
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ if rv:
|
|
|
21ab4e |
+ log.error("Command output:")
|
|
|
21ab4e |
+ log.error(err)
|
|
|
21ab4e |
+ return -1
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ bool_val = output.split()[2]
|
|
|
21ab4e |
+ log.debug("Bool value = '%s'", bool_val)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ return bool_val
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+def get_selinux_status():
|
|
|
21ab4e |
+ getenforce_cli = ["getenforce"]
|
|
|
21ab4e |
+ log.debug("Running command '%s'", " ".join(getenforce_cli))
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ p1 = subprocess.Popen(getenforce_cli, stdout=subprocess.PIPE,
|
|
|
21ab4e |
+ stderr=subprocess.PIPE)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ output, err = p1.communicate()
|
|
|
21ab4e |
+ rv = p1.returncode
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ if rv:
|
|
|
21ab4e |
+ log.error("Command output:")
|
|
|
21ab4e |
+ log.error(err)
|
|
|
21ab4e |
+ return -1
|
|
|
21ab4e |
+ else:
|
|
|
21ab4e |
+ selinux_status=output.rstrip()
|
|
|
21ab4e |
+ log.debug("selinux status: %s", selinux_status)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ return selinux_status
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+def set_cronjob_user_share():
|
|
|
21ab4e |
+ selinux_status = get_selinux_status()
|
|
|
21ab4e |
+ if (selinux_status == -1):
|
|
|
21ab4e |
+ log.error("Failed to get selinux status")
|
|
|
21ab4e |
+ return -1
|
|
|
21ab4e |
+ elif (selinux_status == "Disabled"):
|
|
|
21ab4e |
+ return 0
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ bool_val = get_bool_val()
|
|
|
21ab4e |
+ # In case of a failure (where the boolean value is not)
|
|
|
21ab4e |
+ # present in the system, we should not proceed further
|
|
|
21ab4e |
+ # We should only proceed when the value is "off"
|
|
|
21ab4e |
+ if (bool_val == -1 or bool_val != "off"):
|
|
|
21ab4e |
+ return 0
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ setsebool_cli = ["setsebool", "-P",
|
|
|
21ab4e |
+ "cron_system_cronjob_use_shares",
|
|
|
21ab4e |
+ "on"]
|
|
|
21ab4e |
+ log.debug("Running command '%s'", " ".join(setsebool_cli))
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ p1 = subprocess.Popen(setsebool_cli, stdout=subprocess.PIPE,
|
|
|
21ab4e |
+ stderr=subprocess.PIPE)
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ output, err = p1.communicate()
|
|
|
21ab4e |
+ rv = p1.returncode
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ if rv:
|
|
|
21ab4e |
+ log.error("Command output:")
|
|
|
21ab4e |
+ log.error(err)
|
|
|
21ab4e |
+ return rv
|
|
|
21ab4e |
+
|
|
|
21ab4e |
+ bool_val = get_bool_val()
|
|
|
21ab4e |
+ if (bool_val == "on"):
|
|
|
21ab4e |
+ return 0
|
|
|
21ab4e |
+ else:
|
|
|
21ab4e |
+ # In case of an error or if boolean is not on
|
|
|
21ab4e |
+ # we return a failure here
|
|
|
21ab4e |
+ return -1
|
|
|
21ab4e |
|
|
|
21ab4e |
def initialise_scheduler():
|
|
|
21ab4e |
+ ret = set_cronjob_user_share()
|
|
|
21ab4e |
+ if ret:
|
|
|
21ab4e |
+ log.error("Failed to set selinux boolean "
|
|
|
21ab4e |
+ "cron_system_cronjob_use_shares to 'on'")
|
|
|
21ab4e |
+ return ret
|
|
|
21ab4e |
+
|
|
|
21ab4e |
try:
|
|
|
21ab4e |
with open(TMP_FILE, "w+", 0644) as f:
|
|
|
21ab4e |
updater = ("* * * * * root PATH=$PATH:/usr/local/sbin:"
|
|
|
21ab4e |
--
|
|
|
21ab4e |
1.8.3.1
|
|
|
21ab4e |
|