From 6aa02a74fe5013a02cc499cc0712e7b10d0fa9f4 Mon Sep 17 00:00:00 2001 From: Sam Doran Date: Wed, 18 Sep 2019 19:04:26 -0400 Subject: [PATCH] [stable-2.9] cron - Only run get_bin_path() once (#62554) (cherry picked from commit b7897e3a8d) Co-authored-by: Sam Doran --- .../fragments/cron-only-get-bin-path-once.yaml | 2 ++ lib/ansible/modules/system/cron.py | 16 ++++++++-------- lib/ansible/modules/system/cronvar.py | 16 ++++++++-------- 3 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 changelogs/fragments/cron-only-get-bin-path-once.yaml diff --git a/changelogs/fragments/cron-only-get-bin-path-once.yaml b/changelogs/fragments/cron-only-get-bin-path-once.yaml new file mode 100644 index 00000000000..7a03ff98153 --- /dev/null +++ b/changelogs/fragments/cron-only-get-bin-path-once.yaml @@ -0,0 +1,2 @@ +bugfixes: + - cron cronvar - only run ``get_bin_path()`` once diff --git a/lib/ansible/modules/system/cron.py b/lib/ansible/modules/system/cron.py index 4f2cc6393cf..dfad4faa19e 100644 --- a/lib/ansible/modules/system/cron.py +++ b/lib/ansible/modules/system/cron.py @@ -235,6 +235,7 @@ class CronTab(object): self.lines = None self.ansible = "#Ansible: " self.existing = '' + self.cron_cmd = self.module.get_bin_path('crontab', required=True) if cron_file: if os.path.isabs(cron_file): @@ -509,30 +510,29 @@ class CronTab(object): Returns the command line for reading a crontab """ user = '' - cron_cmd = self.module.get_bin_path('crontab', required=True) if self.user: if platform.system() == 'SunOS': - return "su %s -c '%s -l'" % (shlex_quote(self.user), shlex_quote(cron_cmd)) + return "su %s -c '%s -l'" % (shlex_quote(self.user), shlex_quote(self.cron_cmd)) elif platform.system() == 'AIX': - return "%s -l %s" % (shlex_quote(cron_cmd), shlex_quote(self.user)) + return "%s -l %s" % (shlex_quote(self.cron_cmd), shlex_quote(self.user)) elif platform.system() == 'HP-UX': - return "%s %s %s" % (cron_cmd, '-l', shlex_quote(self.user)) + return "%s %s %s" % (self.cron_cmd, '-l', shlex_quote(self.user)) elif pwd.getpwuid(os.getuid())[0] != self.user: user = '-u %s' % shlex_quote(self.user) - return "%s %s %s" % (cron_cmd, user, '-l') + return "%s %s %s" % (self.cron_cmd, user, '-l') def _write_execute(self, path): """ Return the command line for writing a crontab """ - cron_cmd = self.module.get_bin_path('crontab', required=True) user = '' if self.user: if platform.system() in ['SunOS', 'HP-UX', 'AIX']: - return "chown %s %s ; su '%s' -c '%s %s'" % (shlex_quote(self.user), shlex_quote(path), shlex_quote(self.user), cron_cmd, shlex_quote(path)) + return "chown %s %s ; su '%s' -c '%s %s'" % ( + shlex_quote(self.user), shlex_quote(path), shlex_quote(self.user), self.cron_cmd, shlex_quote(path)) elif pwd.getpwuid(os.getuid())[0] != self.user: user = '-u %s' % shlex_quote(self.user) - return "%s %s %s" % (cron_cmd, user, shlex_quote(path)) + return "%s %s %s" % (self.cron_cmd, user, shlex_quote(path)) def main(): diff --git a/lib/ansible/modules/system/cronvar.py b/lib/ansible/modules/system/cronvar.py index 22680bf61e8..eb7c7a6b7b0 100644 --- a/lib/ansible/modules/system/cronvar.py +++ b/lib/ansible/modules/system/cronvar.py @@ -126,6 +126,7 @@ class CronVar(object): self.user = user self.lines = None self.wordchars = ''.join(chr(x) for x in range(128) if chr(x) not in ('=', "'", '"',)) + self.cron_cmd = self.module.get_bin_path('cronvar', required=True) if cron_file: self.cron_file = "" @@ -290,32 +291,31 @@ class CronVar(object): """ Returns the command line for reading a crontab """ - cron_cmd = self.module.get_bin_path('crontab', required=True) user = '' if self.user: if platform.system() == 'SunOS': - return "su %s -c '%s -l'" % (shlex_quote(self.user), shlex_quote(cron_cmd)) + return "su %s -c '%s -l'" % (shlex_quote(self.user), shlex_quote(self.cron_cmd)) elif platform.system() == 'AIX': - return "%s -l %s" % (shlex_quote(cron_cmd), shlex_quote(self.user)) + return "%s -l %s" % (shlex_quote(self.cron_cmd), shlex_quote(self.user)) elif platform.system() == 'HP-UX': - return "%s %s %s" % (cron_cmd, '-l', shlex_quote(self.user)) + return "%s %s %s" % (self.cron_cmd, '-l', shlex_quote(self.user)) elif pwd.getpwuid(os.getuid())[0] != self.user: user = '-u %s' % shlex_quote(self.user) - return "%s %s %s" % (cron_cmd, user, '-l') + return "%s %s %s" % (self.cron_cmd, user, '-l') def _write_execute(self, path): """ Return the command line for writing a crontab """ - cron_cmd = self.module.get_bin_path('crontab', required=True) user = '' if self.user: if platform.system() in ['SunOS', 'HP-UX', 'AIX']: - return "chown %s %s ; su '%s' -c '%s %s'" % (shlex_quote(self.user), shlex_quote(path), shlex_quote(self.user), cron_cmd, shlex_quote(path)) + return "chown %s %s ; su '%s' -c '%s %s'" % ( + shlex_quote(self.user), shlex_quote(path), shlex_quote(self.user), self.cron_cmd, shlex_quote(path)) elif pwd.getpwuid(os.getuid())[0] != self.user: user = '-u %s' % shlex_quote(self.user) - return "%s %s %s" % (cron_cmd, user, shlex_quote(path)) + return "%s %s %s" % (self.cron_cmd, user, shlex_quote(path)) # ==================================================