91 lines
3.4 KiB
Diff
91 lines
3.4 KiB
Diff
From 8a3bf53398f312b46ed4f304df4c66d061e612c7 Mon Sep 17 00:00:00 2001
|
|
From: Eduardo Otubo <otubo@redhat.com>
|
|
Date: Thu, 28 Feb 2019 12:38:36 +0100
|
|
Subject: cloud-init-per: don't use dashes in sem names
|
|
|
|
RH-Author: Eduardo Otubo <otubo@redhat.com>
|
|
Message-id: <20190228123836.17979-1-otubo@redhat.com>
|
|
Patchwork-id: 84743
|
|
O-Subject: [RHEL-7.7 cloud-init PATCH] This is to fix https://bugs.launchpad.net/cloud-init/+bug/1812676
|
|
Bugzilla: 1664876
|
|
RH-Acked-by: Mohammed Gamal <mgamal@redhat.com>
|
|
RH-Acked-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
|
|
From: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
|
|
It was found that when there is a dash in cloud-init-per command
|
|
name and cloud-init-per is executed through cloud-init's bootcmd, e.g:
|
|
|
|
bootcmd:
|
|
- cloud-init-per instance mycmd-bootcmd /usr/bin/mycmd
|
|
|
|
the command is executed on each boot. However, running the same
|
|
cloud-init-per command manually after boot doesn't reveal the issue. Turns
|
|
out the issue comes from 'migrator' cloud-init module which renames all
|
|
files in /var/lib/cloud/instance/sem/ replacing dashes with underscores. As
|
|
migrator runs before bootcmd it renames
|
|
|
|
/var/lib/cloud/instance/sem/bootper.mycmd-bootcmd.instance
|
|
to
|
|
/var/lib/cloud/instance/sem/bootper.mycmd_bootcmd.instance
|
|
|
|
so cloud-init-per doesn't see it and thinks that the comment was never ran
|
|
before. On next boot the sequence repeats.
|
|
|
|
There are multiple ways to resolve the issue. This patch takes the
|
|
following approach: 'canonicalize' sem names by replacing dashes with
|
|
underscores (this is consistent with post-'migrator' contents of
|
|
/var/lib/cloud/instance/sem/). We, however, need to be careful: in case
|
|
someone had a command with dashes before and he had migrator module enables
|
|
we need to see the old sem file (or the command will run again and this can
|
|
be as bad as formatting a partition!) so we add a small 'migrator' part to
|
|
cloud-init-per script itself checking for legacy sem names.
|
|
|
|
Signed-off-by: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
|
|
commit 9cf9d8cdd3a8fd7d4d425f7051122d0ac8af2bbd
|
|
Author: Vitaly Kuznetsov <vkuznets@redhat.com>
|
|
Date: Mon Feb 18 22:55:49 2019 +0000
|
|
|
|
This is to fix https://bugs.launchpad.net/cloud-init/+bug/1812676
|
|
|
|
Resolves: rhbz#1664876
|
|
X-downstream-only: false
|
|
|
|
Signed-off-by: Eduardo Otubo <otubo@redhat.com>
|
|
Signed-off-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
Signed-off-by: Danilo C. L. de Paula <ddepaula@redhat.com>
|
|
---
|
|
tools/cloud-init-per | 8 +++++++-
|
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/tools/cloud-init-per b/tools/cloud-init-per
|
|
index 7d6754b6..eae3e93f 100755
|
|
--- a/tools/cloud-init-per
|
|
+++ b/tools/cloud-init-per
|
|
@@ -38,7 +38,7 @@ fi
|
|
[ "$1" = "-h" -o "$1" = "--help" ] && { Usage ; exit 0; }
|
|
[ $# -ge 3 ] || { Usage 1>&2; exit 1; }
|
|
freq=$1
|
|
-name=$2
|
|
+name=${2/-/_}
|
|
shift 2;
|
|
|
|
[ "${name#*/}" = "${name}" ] || fail "name cannot contain a /"
|
|
@@ -53,6 +53,12 @@ esac
|
|
[ -d "${sem%/*}" ] || mkdir -p "${sem%/*}" ||
|
|
fail "failed to make directory for ${sem}"
|
|
|
|
+# Rename legacy sem files with dashes in their names. Do not overwrite existing
|
|
+# sem files to prevent clobbering those which may have been created from calls
|
|
+# outside of cloud-init.
|
|
+sem_legacy="${sem/_/-}"
|
|
+[ "$sem" != "$sem_legacy" -a -e "$sem_legacy" ] && mv -n "$sem_legacy" "$sem"
|
|
+
|
|
[ "$freq" != "always" -a -e "$sem" ] && exit 0
|
|
"$@"
|
|
ret=$?
|
|
--
|
|
2.20.1
|
|
|