commit:     627e925463068e754ffd869f99a43634d6d9631e
Author:     William Hubbs <w.d.hubbs <AT> gmail <DOT> com>
AuthorDate: Thu Dec  3 20:09:38 2015 +0000
Commit:     William Hubbs <williamh <AT> gentoo <DOT> org>
CommitDate: Thu Dec  3 22:52:15 2015 +0000
URL:        https://gitweb.gentoo.org/proj/openrc.git/commit/?id=627e9254

add support for -containers keyword

 man/openrc-run.8      |  3 +++
 sh/gendepends.sh.in   | 13 ++++++++++++-
 sh/openrc-run.sh.in   | 13 ++++++++++++-
 sh/rc-functions.sh.in | 21 +++++++++++++++++++++
 4 files changed, 48 insertions(+), 2 deletions(-)

diff --git a/man/openrc-run.8 b/man/openrc-run.8
index 6aab067..5d18fe5 100644
--- a/man/openrc-run.8
+++ b/man/openrc-run.8
@@ -227,6 +227,9 @@ Same as -jail, but for Xen DOM0 systems.
 Same as -jail, but for Xen DOMU systems.
 .It Dv -docker
 Same as -jail, but for docker systems.
+.It Dv -containers
+Same as -jail, but for all relevant container types on the operating
+system.
 .El
 .El
 .Pp

diff --git a/sh/gendepends.sh.in b/sh/gendepends.sh.in
index 36caeb7..2ab798d 100644
--- a/sh/gendepends.sh.in
+++ b/sh/gendepends.sh.in
@@ -29,7 +29,18 @@ provide() {
        [ -n "$*" ] && echo "$RC_SVCNAME iprovide $*" >&3
 }
 keyword() {
-       [ -n "$*" ] && echo "$RC_SVCNAME keyword $*" >&3
+       local c x
+       set -- $*
+       while [ -n "$*" ]; do
+               case "$1" in
+                       -containers) x="$(_get_containers)" ;;
+                       !-containers) x="$(_get_containers_remove)" ;;
+                       *) x=$1 ;;
+               esac
+               c="${c}${x} "
+               shift
+       done
+       [ -n "$c" ] && echo "$RC_SVCNAME keyword $c" >&3
 }
 depend() {
        :

diff --git a/sh/openrc-run.sh.in b/sh/openrc-run.sh.in
index c169204..5018cee 100644
--- a/sh/openrc-run.sh.in
+++ b/sh/openrc-run.sh.in
@@ -79,7 +79,18 @@ provide() {
        [ -n "$*" ] && echo "provide $*"
 }
 keyword() {
-       [ -n "$*" ] && echo "keyword $*"
+       local c x
+       set -- $*
+       while [ -n "$*" ]; do
+               case "$1" in
+                       -containers) x="$(_get_containers)" ;;
+                       !-containers) x="$(_get_containers_remove)" ;;
+                       *) x=$1 ;;
+               esac
+               c="${c}${x} "
+               shift
+       done
+       [ -n "$c" ] && echo "keyword $c"
 }
 
 # Describe the init script to the user

diff --git a/sh/rc-functions.sh.in b/sh/rc-functions.sh.in
index c854876..12eb4e2 100644
--- a/sh/rc-functions.sh.in
+++ b/sh/rc-functions.sh.in
@@ -86,6 +86,27 @@ get_bootparam()
 }
 
 # Called from openrc-run.sh or gendepends.sh
+_get_containers() {
+       local c
+       case "${RC_UNAME}" in
+       FreeBSD)
+               c="-jail"
+               ;;
+       Linux)
+               c="-docker -lxc -openvz -rkt -systemd-nspawn -uml -vserver"
+               ;;
+       esac
+       echo $c
+}
+
+_get_containers_remove() {
+       local c
+       for x in $(_get_containers); do
+               c="${c}!${x} "
+       done
+       echo $c
+}
+
 _depend() {
        depend
        local _rc_svcname=$(shell_var "$RC_SVCNAME") _deptype= _depends=

Reply via email to