From 09dcecf37628c5809ae21d7785693cb7358ca94c Mon Sep 17 00:00:00 2001
From: Robert Schweikert <rjschwei@suse.com>
Date: Mon, 28 Jan 2019 17:51:57 +0000
Subject: systemd: Render generator from template to account for system
 differences.

The systemd generator used had a hard coded path for the location target
file to create.  This path does not apply to all distributions.
Make the generator and template to have the path set during build time.
---
 systemd/cloud-init-generator      | 170 ------------------------------------
 systemd/cloud-init-generator.tmpl | 175 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 175 insertions(+), 170 deletions(-)
 delete mode 100755 systemd/cloud-init-generator
 create mode 100755 systemd/cloud-init-generator.tmpl

(limited to 'systemd')

diff --git a/systemd/cloud-init-generator b/systemd/cloud-init-generator
deleted file mode 100755
index bd9f2678..00000000
--- a/systemd/cloud-init-generator
+++ /dev/null
@@ -1,170 +0,0 @@
-#!/bin/sh
-set -f
-
-LOG=""
-DEBUG_LEVEL=1
-LOG_D="/run/cloud-init"
-ENABLE="enabled"
-DISABLE="disabled"
-FOUND="found"
-NOTFOUND="notfound"
-RUN_ENABLED_FILE="$LOG_D/$ENABLE"
-CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target"
-CLOUD_TARGET_NAME="cloud-init.target"
-# lxc sets 'container', but lets make that explicitly a global
-CONTAINER="${container}"
-
-debug() {
-    local lvl="$1"
-    shift
-    [ "$lvl" -gt "$DEBUG_LEVEL" ] && return
-    if [ -z "$LOG" ]; then
-        local log="$LOG_D/${0##*/}.log"
-        { [ -d "$LOG_D" ] || mkdir -p "$LOG_D"; } &&
-            { : > "$log"; } >/dev/null 2>&1 && LOG="$log" ||
-            LOG="/dev/kmsg"
-    fi
-    echo "$@" >> "$LOG"
-}
-
-etc_file() {
-    local pprefix="${1:-/etc/cloud/cloud-init.}"
-    _RET="unset"
-    [ -f "${pprefix}$ENABLE" ] && _RET="$ENABLE" && return 0
-    [ -f "${pprefix}$DISABLE" ] && _RET="$DISABLE" && return 0
-    return 0
-}
-
-read_proc_cmdline() {
-    # return /proc/cmdline for non-container, and /proc/1/cmdline for container
-    local ctname="systemd"
-    if [ -n "$CONTAINER" ] && ctname=$CONTAINER ||
-        systemd-detect-virt --container --quiet; then
-        if { _RET=$(tr '\0' ' ' < /proc/1/cmdline); } 2>/dev/null; then
-            _RET_MSG="container[$ctname]: pid 1 cmdline"
-            return
-        fi
-        _RET=""
-        _RET_MSG="container[$ctname]: pid 1 cmdline not available"
-        return 0
-    fi
-
-    _RET_MSG="/proc/cmdline"
-    read _RET < /proc/cmdline
-}
-
-kernel_cmdline() {
-    local cmdline="" tok=""
-    if [ -n "${KERNEL_CMDLINE+x}" ]; then
-        # use KERNEL_CMDLINE if present in environment even if empty
-        cmdline=${KERNEL_CMDLINE}
-        debug 1 "kernel command line from env KERNEL_CMDLINE: $cmdline"
-    elif read_proc_cmdline; then
-        read_proc_cmdline && cmdline="$_RET"
-        debug 1 "kernel command line ($_RET_MSG): $cmdline"
-    fi
-    _RET="unset"
-    cmdline=" $cmdline "
-    tok=${cmdline##* cloud-init=}
-    [ "$tok" = "$cmdline" ] && _RET="unset"
-    tok=${tok%% *}
-    [ "$tok" = "$ENABLE" -o "$tok" = "$DISABLE" ] && _RET="$tok"
-    return 0
-}
-
-default() {
-    _RET="$ENABLE"
-}
-
-check_for_datasource() {
-    local ds_rc="" dsidentify="/usr/lib/cloud-init/ds-identify"
-    if [ ! -x "$dsidentify" ]; then
-        debug 1 "no ds-identify in $dsidentify. _RET=$FOUND"
-        return 0
-    fi
-    $dsidentify
-    ds_rc=$?
-    debug 1 "ds-identify rc=$ds_rc"
-    if [ "$ds_rc" = "0" ]; then
-        _RET="$FOUND"
-        debug 1 "ds-identify _RET=$_RET"
-        return 0
-    fi
-    _RET="$NOTFOUND"
-    debug 1 "ds-identify _RET=$_RET"
-    return 1
-}
-
-main() {
-    local normal_d="$1" early_d="$2" late_d="$3"
-    local target_name="multi-user.target" gen_d="$early_d"
-    local link_path="$gen_d/${target_name}.wants/${CLOUD_TARGET_NAME}"
-    local ds="$NOTFOUND"
-
-    debug 1 "$0 normal=$normal_d early=$early_d late=$late_d"
-    debug 2 "$0 $*"
-
-    local search result="error" ret=""
-    for search in kernel_cmdline etc_file default; do
-        if $search; then
-            debug 1 "$search found $_RET"
-            [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] &&
-                result=$_RET && break
-        else
-            ret=$?
-            debug 0 "search $search returned $ret"
-        fi
-    done
-
-    # enable AND ds=found == enable
-    # enable AND ds=notfound == disable
-    # disable || <any> == disabled
-    if [ "$result" = "$ENABLE" ]; then
-        debug 1 "checking for datasource"
-        check_for_datasource
-        ds=$_RET
-        if [ "$ds" = "$NOTFOUND" ]; then
-            debug 1 "cloud-init is enabled but no datasource found, disabling"
-            result="$DISABLE"
-        fi
-    fi
-
-    if [ "$result" = "$ENABLE" ]; then
-        if [ -e "$link_path" ]; then
-                debug 1 "already enabled: no change needed"
-        else
-            [ -d "${link_path%/*}" ] || mkdir -p "${link_path%/*}" ||
-                debug 0 "failed to make dir $link_path"
-            if ln -snf "$CLOUD_SYSTEM_TARGET" "$link_path"; then
-                debug 1 "enabled via $link_path -> $CLOUD_SYSTEM_TARGET"
-            else
-                ret=$?
-                debug 0 "[$ret] enable failed:" \
-                    "ln $CLOUD_SYSTEM_TARGET $link_path"
-            fi
-        fi
-        : > "$RUN_ENABLED_FILE"
-    elif [ "$result" = "$DISABLE" ]; then
-        if [ -f "$link_path" ]; then
-            if rm -f "$link_path"; then
-                debug 1 "disabled. removed existing $link_path"
-            else
-                ret=$?
-                debug 0 "[$ret] disable failed, remove $link_path"
-            fi
-        else
-            debug 1 "already disabled: no change needed [no $link_path]"
-        fi
-        if [ -e "$RUN_ENABLED_FILE" ]; then
-            rm -f "$RUN_ENABLED_FILE"
-        fi
-    else
-        debug 0 "unexpected result '$result' 'ds=$ds'"
-        ret=3
-    fi
-    return $ret
-}
-
-main "$@"
-
-# vi: ts=4 expandtab
diff --git a/systemd/cloud-init-generator.tmpl b/systemd/cloud-init-generator.tmpl
new file mode 100755
index 00000000..cfa5eb53
--- /dev/null
+++ b/systemd/cloud-init-generator.tmpl
@@ -0,0 +1,175 @@
+## template:jinja
+#!/bin/sh
+set -f
+
+LOG=""
+DEBUG_LEVEL=1
+LOG_D="/run/cloud-init"
+ENABLE="enabled"
+DISABLE="disabled"
+FOUND="found"
+NOTFOUND="notfound"
+RUN_ENABLED_FILE="$LOG_D/$ENABLE"
+{% if variant in ["suse"] %}
+CLOUD_SYSTEM_TARGET="/usr/lib/systemd/system/cloud-init.target"
+{% else %}
+CLOUD_SYSTEM_TARGET="/lib/systemd/system/cloud-init.target"
+{% endif %}
+CLOUD_TARGET_NAME="cloud-init.target"
+# lxc sets 'container', but lets make that explicitly a global
+CONTAINER="${container}"
+
+debug() {
+    local lvl="$1"
+    shift
+    [ "$lvl" -gt "$DEBUG_LEVEL" ] && return
+    if [ -z "$LOG" ]; then
+        local log="$LOG_D/${0##*/}.log"
+        { [ -d "$LOG_D" ] || mkdir -p "$LOG_D"; } &&
+            { : > "$log"; } >/dev/null 2>&1 && LOG="$log" ||
+            LOG="/dev/kmsg"
+    fi
+    echo "$@" >> "$LOG"
+}
+
+etc_file() {
+    local pprefix="${1:-/etc/cloud/cloud-init.}"
+    _RET="unset"
+    [ -f "${pprefix}$ENABLE" ] && _RET="$ENABLE" && return 0
+    [ -f "${pprefix}$DISABLE" ] && _RET="$DISABLE" && return 0
+    return 0
+}
+
+read_proc_cmdline() {
+    # return /proc/cmdline for non-container, and /proc/1/cmdline for container
+    local ctname="systemd"
+    if [ -n "$CONTAINER" ] && ctname=$CONTAINER ||
+        systemd-detect-virt --container --quiet; then
+        if { _RET=$(tr '\0' ' ' < /proc/1/cmdline); } 2>/dev/null; then
+            _RET_MSG="container[$ctname]: pid 1 cmdline"
+            return
+        fi
+        _RET=""
+        _RET_MSG="container[$ctname]: pid 1 cmdline not available"
+        return 0
+    fi
+
+    _RET_MSG="/proc/cmdline"
+    read _RET < /proc/cmdline
+}
+
+kernel_cmdline() {
+    local cmdline="" tok=""
+    if [ -n "${KERNEL_CMDLINE+x}" ]; then
+        # use KERNEL_CMDLINE if present in environment even if empty
+        cmdline=${KERNEL_CMDLINE}
+        debug 1 "kernel command line from env KERNEL_CMDLINE: $cmdline"
+    elif read_proc_cmdline; then
+        read_proc_cmdline && cmdline="$_RET"
+        debug 1 "kernel command line ($_RET_MSG): $cmdline"
+    fi
+    _RET="unset"
+    cmdline=" $cmdline "
+    tok=${cmdline##* cloud-init=}
+    [ "$tok" = "$cmdline" ] && _RET="unset"
+    tok=${tok%% *}
+    [ "$tok" = "$ENABLE" -o "$tok" = "$DISABLE" ] && _RET="$tok"
+    return 0
+}
+
+default() {
+    _RET="$ENABLE"
+}
+
+check_for_datasource() {
+    local ds_rc="" dsidentify="/usr/lib/cloud-init/ds-identify"
+    if [ ! -x "$dsidentify" ]; then
+        debug 1 "no ds-identify in $dsidentify. _RET=$FOUND"
+        return 0
+    fi
+    $dsidentify
+    ds_rc=$?
+    debug 1 "ds-identify rc=$ds_rc"
+    if [ "$ds_rc" = "0" ]; then
+        _RET="$FOUND"
+        debug 1 "ds-identify _RET=$_RET"
+        return 0
+    fi
+    _RET="$NOTFOUND"
+    debug 1 "ds-identify _RET=$_RET"
+    return 1
+}
+
+main() {
+    local normal_d="$1" early_d="$2" late_d="$3"
+    local target_name="multi-user.target" gen_d="$early_d"
+    local link_path="$gen_d/${target_name}.wants/${CLOUD_TARGET_NAME}"
+    local ds="$NOTFOUND"
+
+    debug 1 "$0 normal=$normal_d early=$early_d late=$late_d"
+    debug 2 "$0 $*"
+
+    local search result="error" ret=""
+    for search in kernel_cmdline etc_file default; do
+        if $search; then
+            debug 1 "$search found $_RET"
+            [ "$_RET" = "$ENABLE" -o "$_RET" = "$DISABLE" ] &&
+                result=$_RET && break
+        else
+            ret=$?
+            debug 0 "search $search returned $ret"
+        fi
+    done
+
+    # enable AND ds=found == enable
+    # enable AND ds=notfound == disable
+    # disable || <any> == disabled
+    if [ "$result" = "$ENABLE" ]; then
+        debug 1 "checking for datasource"
+        check_for_datasource
+        ds=$_RET
+        if [ "$ds" = "$NOTFOUND" ]; then
+            debug 1 "cloud-init is enabled but no datasource found, disabling"
+            result="$DISABLE"
+        fi
+    fi
+
+    if [ "$result" = "$ENABLE" ]; then
+        if [ -e "$link_path" ]; then
+                debug 1 "already enabled: no change needed"
+        else
+            [ -d "${link_path%/*}" ] || mkdir -p "${link_path%/*}" ||
+                debug 0 "failed to make dir $link_path"
+            if ln -snf "$CLOUD_SYSTEM_TARGET" "$link_path"; then
+                debug 1 "enabled via $link_path -> $CLOUD_SYSTEM_TARGET"
+            else
+                ret=$?
+                debug 0 "[$ret] enable failed:" \
+                    "ln $CLOUD_SYSTEM_TARGET $link_path"
+            fi
+        fi
+        : > "$RUN_ENABLED_FILE"
+    elif [ "$result" = "$DISABLE" ]; then
+        if [ -f "$link_path" ]; then
+            if rm -f "$link_path"; then
+                debug 1 "disabled. removed existing $link_path"
+            else
+                ret=$?
+                debug 0 "[$ret] disable failed, remove $link_path"
+            fi
+        else
+            debug 1 "already disabled: no change needed [no $link_path]"
+        fi
+        if [ -e "$RUN_ENABLED_FILE" ]; then
+            rm -f "$RUN_ENABLED_FILE"
+        fi
+    else
+        debug 0 "unexpected result '$result' 'ds=$ds'"
+        ret=3
+    fi
+    return $ret
+}
+
+main "$@"
+
+# vi: ts=4 expandtab
-- 
cgit v1.2.3


From e1795a5cd1cb216e5514f55bdb1cddc605f40df3 Mon Sep 17 00:00:00 2001
From: Ryan Harper <ryan.harper@canonical.com>
Date: Wed, 19 Jun 2019 17:16:08 +0000
Subject: cloud-init-generator: use libexec path to ds-identify on redhat
 systems

Update the template to use libexec prefix path to ds-identify on redhat
systems.

LP: #1833264
---
 systemd/cloud-init-generator.tmpl | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

(limited to 'systemd')

diff --git a/systemd/cloud-init-generator.tmpl b/systemd/cloud-init-generator.tmpl
index cfa5eb53..45efa243 100755
--- a/systemd/cloud-init-generator.tmpl
+++ b/systemd/cloud-init-generator.tmpl
@@ -82,7 +82,12 @@ default() {
 }
 
 check_for_datasource() {
-    local ds_rc="" dsidentify="/usr/lib/cloud-init/ds-identify"
+    local ds_rc=""
+{% if variant in ["redhat", "fedora", "centos"] %}
+    local dsidentify="/usr/libexec/cloud-init/ds-identify"
+{% else %}
+    local dsidentify="/usr/lib/cloud-init/ds-identify"
+{% endif %}
     if [ ! -x "$dsidentify" ]; then
         debug 1 "no ds-identify in $dsidentify. _RET=$FOUND"
         return 0
-- 
cgit v1.2.3


From 66ef979a2d7b8003def1ee4d7a6b6a261b37e0ee Mon Sep 17 00:00:00 2001
From: Robert Schweikert <rjschwei@suse.com>
Date: Thu, 26 Sep 2019 14:39:27 +0000
Subject: systemd/cloud-init.service.tmpl: start after wicked.service

Change the startup order. On SUSE distros cloud-init.service
should start after wicked.service. This reflects the same
start up order other distributions utilize.
---
 systemd/cloud-init.service.tmpl | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

(limited to 'systemd')

diff --git a/systemd/cloud-init.service.tmpl b/systemd/cloud-init.service.tmpl
index 5cb00371..1e5942a8 100644
--- a/systemd/cloud-init.service.tmpl
+++ b/systemd/cloud-init.service.tmpl
@@ -14,7 +14,7 @@ After=networking.service
 After=network.service
 {% endif %}
 {% if variant in ["suse"] %}
-Before=wicked.service
+After=wicked.service
 # setting hostname via hostnamectl depends on dbus, which otherwise
 # would not be guaranteed at this point.
 After=dbus.service
-- 
cgit v1.2.3


From 8888ca1af7f1fed33e79b56694834310ed35559a Mon Sep 17 00:00:00 2001
From: Ryan Harper <ryan.harper@canonical.com>
Date: Thu, 31 Oct 2019 14:45:29 +0000
Subject: cloud-init.service: on centos/fedora/redhat wait on
 NetworkManager.service

In Centos/RHEL 8, NetworkManager is installed as the networking service.
cloud-init.service needs to run After this service to allow the OS to
bring networking up first.

LP: #1843334
---
 systemd/cloud-init.service.tmpl | 1 +
 1 file changed, 1 insertion(+)

(limited to 'systemd')

diff --git a/systemd/cloud-init.service.tmpl b/systemd/cloud-init.service.tmpl
index 1e5942a8..9ad3574c 100644
--- a/systemd/cloud-init.service.tmpl
+++ b/systemd/cloud-init.service.tmpl
@@ -12,6 +12,7 @@ After=networking.service
 {% endif %}
 {% if variant in ["centos", "fedora", "redhat"] %}
 After=network.service
+After=NetworkManager.service
 {% endif %}
 {% if variant in ["suse"] %}
 After=wicked.service
-- 
cgit v1.2.3