is similar to
<varname>ConditionPathExists=</varname>
but verifies whether a certain path
- exists and is a
- symbolic link. <varname>ConditionPathIsMountPoint=</varname>
+ exists and is a symbolic
+ link. <varname>ConditionPathIsMountPoint=</varname>
is similar to
<varname>ConditionPathExists=</varname>
but verifies whether a certain path
whether it is a specific
implementation. Takes either boolean
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>kvm</varname>,
<varname>vmware</varname>,
<varname>microsoft</varname>,
<varname>oracle</varname>,
<varname>xen</varname>,
+ <varname>bochs</varname>,
+ <varname>chroot</varname>,
<varname>openvz</varname>,
<varname>lxc</varname>,
<varname>systemd-nspawn</varname>,
#include "util.h"
#include "condition.h"
+#include "virt.h"
Condition* condition_new(ConditionType type, const char *parameter, bool trigger, bool negate) {
Condition *c;
}
static bool test_virtualization(const char *parameter) {
- int r, b;
+ int b;
+ Virtualization v;
const char *id;
assert(parameter);
- r = detect_virtualization(&id);
- if (r < 0) {
- log_warning("Failed to detect virtualization, ignoring: %s", strerror(-r));
+ v = detect_virtualization(&id);
+ if (v < 0) {
+ log_warning("Failed to detect virtualization, ignoring: %s", strerror(-v));
return false;
}
+ /* First, compare with yes/no */
b = parse_boolean(parameter);
- if (r > 0 && b > 0)
+ if (v > 0 && b > 0)
+ return true;
+
+ if (v == 0 && b == 0)
+ return true;
+
+ /* Then, compare categorization */
+ if (v == VIRTUALIZATION_VM && streq(parameter, "vm"))
return true;
- if (r == 0 && b == 0)
+ if (v == VIRTUALIZATION_CONTAINER && streq(parameter, "container"))
return true;
+ /* Finally compare id */
return streq(parameter, id);
}