Во-первых, идиоматический способ сделать это - создать пользовательский факт , который определяет статус принудительного применения SELinux для узлов.В ваших манипуляционных марионетках вы будете использовать обычную условную марионетку, основанную на значении этого факта.Например,
if $selinux_enforcement in ['Permissive', 'Enforcing'] {
exec { "some command":
timeout => 30
}
}
Но если вы хотите специально использовать свойство unless
или onlyif
ресурса Exec
, чтобы контролировать, следует ли запускать команду этого Exec, тогдаВы должны понимать, что эти свойства указывают команды операционной системы , которые необходимо выполнить для выполнения оценки.Их коды выхода указывают, следует ли продолжить выполнение основной командыДля цели Linux, используя поставщика Exec по умолчанию, posix
, вы можете сделать что-то вроде этого:
exec { "some command":
path => [ '/bin', '/usr/bin', '/sbin', '/usr/sbin' ],
timeout => 30,
onlyif => 'bash -c "case $(getenforce) in Enforcing|Permissive) exit 0;; *) exit 1;; esac"' ,
}
Обратите внимание, что программный пакет SELinux обычно содержит команду selinuxenabled
, который решает вопрос более прямо, чем getenforce
.Эта команда, предназначенная для использования в сценариях, передает свой результат через состояние выхода, поэтому она может быть лучшим кандидатом для вашего onlyif
, упрощая его до:
onlyif => 'selinuxenabled'