]> code.ossystems Code Review - openembedded-core.git/commitdiff
systemd-systemctl-native: handle Install wildcards
authorBrad Bishop <bradleyb@fuzziesquirrel.com>
Tue, 6 Nov 2018 00:23:07 +0000 (19:23 -0500)
committerRichard Purdie <richard.purdie@linuxfoundation.org>
Mon, 28 Jan 2019 16:56:33 +0000 (16:56 +0000)
Handle the %i wildcard appearing in a dependency in the Install section
of a template unit, e.g.

  $ cat foo@.service

  [Install]
  WantedBy=bar@%i.target

Using the real systemctl something like:

  $ systemctl enable foo@baz.service

will create a symlink in /etc/systemd/system/bar@baz.target.wants.
Detect wildcards in templates and make the appropriate substitution.

(From OE-Core rev: 22ed19292d160461042d4a2294fe2ec0b953873e)

Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
meta/recipes-core/systemd/systemd-systemctl/systemctl

index 6e5a1b718129106cd0b8a1cb3c94e1d78410ed88..2bc64896176145e614611a4f9f77cda5952f4d6a 100755 (executable)
@@ -84,11 +84,7 @@ for service in $services; do
        else
                echo "Try to find location of template $service_base_file of instance $service..."
                service_template=true
-               if [ -z `echo $service | sed 's/^.\+@\(.*\)\.[^.]\+/\1/'` ]; then
-                       instance_specified=false
-               else
-                       instance_specified=true
-               fi
+               instance_specified=`echo $service | sed 's/^.\+@\(.*\)\.[^.]\+/\1/'`
        fi
 
        # find service file
@@ -139,9 +135,14 @@ for service in $services; do
                fi
                for r in $dependency_list; do
                        echo "$dependency=$r found in $service"
+                       if [ -n "$instance_specified" ]; then
+                               # substitute wildcards in the dependency
+                               r=`echo $r | sed "s/%i/$instance_specified/g"`
+                       fi
+
                        if [ "$action" = "enable" ]; then
                                enable_service=$service
-                               if [ "$service_template" = true -a "$instance_specified" = false ]; then
+                               if [ "$service_template" = true -a -z "$instance_specified" ]; then
                                        default_instance=$(sed '/^DefaultInstance[[:space:]]*=/s,[^=]*=,,p;d' "$ROOT/$service_file")
                                        if [ -z $default_instance ]; then
                                                echo "Template unit without instance or DefaultInstance directive, nothing to enable"
@@ -155,7 +156,7 @@ for service in $services; do
                                ln -s $service_file $ROOT/etc/systemd/system/$r.$suffix/$enable_service
                                echo "Enabled $enable_service for $r."
                        else
-                               if [ "$service_template" = true -a "$instance_specified" = false ]; then
+                               if [ "$service_template" = true -a -z "$instance_specified" ]; then
                                        disable_service="$ROOT/etc/systemd/system/$r.$suffix/`echo $service | sed 's/@/@*/'`"
                                else
                                        disable_service="$ROOT/etc/systemd/system/$r.$suffix/$service"