От одной из нескольких машин я настроил:
[keiths@vm-dmz-host1 ~] кошка $/etc/redhat-release
Выпуск 4.8 CentOS (Финал)
[keiths@vm-dmz-host1 ~] $
[keiths@myserver ~] $ uname-a
Linux myserver 2.6.9-34. ELsmp № 1 SMP среда 8 марта 0:27:03 GNU/Linux CST 2006 i686 i686 i386
[keiths@myserver ~] $ sudo кошка/proc/net/bonding/bond0
Пароль:
Драйвер Связывания Канала Ethernet: v2.6.1 (29 октября 2004)
Связывание Режима: отказоустойчивость (активное резервное копирование)
Основное ведомое устройство:Ничего
В настоящее время Активное Ведомое устройство: eth0
Состояние MII:
MII, опрашивающий интервал (мс): 50
Задержка (мс): 0
Вниз задержка (мс): 0
Ведомый Интерфейс: eth0
Состояние MII:
Количество отказа канала: 0
Постоянный HW addr: 00:0d:60:9c:35:2e
Ведомый Интерфейс: eth1
Состояние MII:
Количество отказа канала: 0
Постоянный HW addr: 00:0d:60:9c:35:2f
[keiths@myserver ~] $
[keiths@myserver ~] $ sudo кошка/etc/modprobe.conf
исказите scsi_hostadapter мегаязя
eth0 tg3 псевдонима
eth1 tg3 псевдонима
исказите связывание bond0
опции bond0 mode=1 miimon=50
контроллер usb псевдонима ohci-hcd
[keiths@myserver ~] $
[keiths@myserver ~] $ sudo кошка/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=192.168.46.170
NETMASK=255.255.255.224
NETWORK=192.168.46.160
BROADCAST=192.168.46.191
GATEWAY=192.168.46.161
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
USERCTL=no
[keiths@myserver ~] $
[keiths@myserver ~] $ sudo кошка/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond0
SLAVE=yes
HWADDR=00:0D:60:9C:35:2E
[keiths@myserver ~] $
[keiths@myserver ~] $ sudo кошка/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
ONBOOT=yes
TYPE=Ethernet
USERCTL=no
MASTER=bond0
SLAVE=yes
HWADDR=00:0D:60:9C:35:2F
[keiths@myserver ~] $
Насколько я знаю, вы не можете. Либо позвольте ему потерпеть неудачу, либо обнаружите и выйдите изящно. У меня есть несколько подключаемых модулей, которые работают только с Debian, но не работают с Red Hat без каких-либо последствий.
Также обратите внимание, что НЕВОЗМОЖНО проводить оценку факта ПОСЛЕ ввода некоторой конфигурации. Архитектура просто не поддерживает это:
Client Server
Compute facts
Ask for catalog passing facts => Receive Catalog request
Compute catalog using facts
<= Return Catalog
Based on the dependency tree,
For each configuration with satisfied dependencies
Apply configuration
Mark (or not) dependency as satisfied
Send report, if configured so
Итак, как видите, конфигурация применяется только спустя долгое время после обработки фактов, и пути назад нет. Может случиться так, что следующий прогон теперь сможет сгенерировать этот факт.
См. Также трюк, использованный модулем Common для обработки отсутствия lsbrelease в Debian без приводящие к фатальным ошибкам.
Добавьте проверку в сам код факта. Проверьте, существует ли biosdevname, прежде чем пытаться его запустить. Если его нет, установите значение undef. Используйте в своих манифестах операторы if, которые требуют, чтобы этот факт имел определенное значение.
Вы можете добавить в свои плагины условные обозначения, чтобы проверить различные вещи перед добавление фактов, и, кроме того, в Facter есть метод "ограничить", который будет запускать обнаружение Facter только на основе условий в других фактах (например, поддержка Windows для Facter сильно зависит от Confine)
Пример условного факта:
if File.exists?("/usr/bin/mysql")
Facter.add(:mysql_version) do
%x[#{mysqlcmd} "SELECT VERSION()"].to_s.strip
end
end
Пример ограничения:
# Packaging on OpenBSD. Doesn't work anywhere else that I know of.
Puppet::Type.type(:package).provide :openbsd, :parent => Puppet::Provider::Package do
desc "OpenBSD's form of `pkg_add` support."
commands :pkginfo => "pkg_info", :pkgadd => "pkg_add", :pkgdelete => "pkg_delete"
defaultfor :operatingsystem => :openbsd
confine :operatingsystem => :openbsd