mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-11 05:17:44 +03:00
condition: optionally test against type of virtualization (vm vs. container)
This commit is contained in:
parent
b52aae1d93
commit
8095200d05
@ -707,8 +707,8 @@
|
|||||||
is similar to
|
is similar to
|
||||||
<varname>ConditionPathExists=</varname>
|
<varname>ConditionPathExists=</varname>
|
||||||
but verifies whether a certain path
|
but verifies whether a certain path
|
||||||
exists and is a
|
exists and is a symbolic
|
||||||
symbolic link. <varname>ConditionPathIsMountPoint=</varname>
|
link. <varname>ConditionPathIsMountPoint=</varname>
|
||||||
is similar to
|
is similar to
|
||||||
<varname>ConditionPathExists=</varname>
|
<varname>ConditionPathExists=</varname>
|
||||||
but verifies whether a certain path
|
but verifies whether a certain path
|
||||||
@ -746,13 +746,19 @@
|
|||||||
whether it is a specific
|
whether it is a specific
|
||||||
implementation. Takes either boolean
|
implementation. Takes either boolean
|
||||||
value to check if being executed in
|
value to check if being executed in
|
||||||
any virtual environment or one of
|
any virtualized environment, or one of
|
||||||
|
<varname>vm</varname> and
|
||||||
|
<varname>container</varname> to test against
|
||||||
|
a specific type of virtualization
|
||||||
|
solution, or one of
|
||||||
<varname>qemu</varname>,
|
<varname>qemu</varname>,
|
||||||
<varname>kvm</varname>,
|
<varname>kvm</varname>,
|
||||||
<varname>vmware</varname>,
|
<varname>vmware</varname>,
|
||||||
<varname>microsoft</varname>,
|
<varname>microsoft</varname>,
|
||||||
<varname>oracle</varname>,
|
<varname>oracle</varname>,
|
||||||
<varname>xen</varname>,
|
<varname>xen</varname>,
|
||||||
|
<varname>bochs</varname>,
|
||||||
|
<varname>chroot</varname>,
|
||||||
<varname>openvz</varname>,
|
<varname>openvz</varname>,
|
||||||
<varname>lxc</varname>,
|
<varname>lxc</varname>,
|
||||||
<varname>systemd-nspawn</varname>,
|
<varname>systemd-nspawn</varname>,
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "condition.h"
|
#include "condition.h"
|
||||||
|
#include "virt.h"
|
||||||
|
|
||||||
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
|
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
|
||||||
Condition *c;
|
Condition *c;
|
||||||
@ -118,25 +119,35 @@ static bool test_kernel_command_line(const char *parameter) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static bool test_virtualization(const char *parameter) {
|
static bool test_virtualization(const char *parameter) {
|
||||||
int r, b;
|
int b;
|
||||||
|
Virtualization v;
|
||||||
const char *id;
|
const char *id;
|
||||||
|
|
||||||
assert(parameter);
|
assert(parameter);
|
||||||
|
|
||||||
r = detect_virtualization(&id);
|
v = detect_virtualization(&id);
|
||||||
if (r < 0) {
|
if (v < 0) {
|
||||||
log_warning("Failed to detect virtualization, ignoring: %s", strerror(-r));
|
log_warning("Failed to detect virtualization, ignoring: %s", strerror(-v));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* First, compare with yes/no */
|
||||||
b = parse_boolean(parameter);
|
b = parse_boolean(parameter);
|
||||||
|
|
||||||
if (r > 0 && b > 0)
|
if (v > 0 && b > 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (r == 0 && b == 0)
|
if (v == 0 && b == 0)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
/* Then, compare categorization */
|
||||||
|
if (v == VIRTUALIZATION_VM && streq(parameter, "vm"))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (v == VIRTUALIZATION_CONTAINER && streq(parameter, "container"))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
/* Finally compare id */
|
||||||
return streq(parameter, id);
|
return streq(parameter, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user