Определение предпосылок для Марионеточных пользовательских фактов?

От одной из нескольких машин я настроил:

[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 ~] $

2
задан 2 November 2011 в 19:03
3 ответа

Насколько я знаю, вы не можете. Либо позвольте ему потерпеть неудачу, либо обнаружите и выйдите изящно. У меня есть несколько подключаемых модулей, которые работают только с 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 без приводящие к фатальным ошибкам.

5
ответ дан 3 December 2019 в 09:22

Добавьте проверку в сам код факта. Проверьте, существует ли biosdevname, прежде чем пытаться его запустить. Если его нет, установите значение undef. Используйте в своих манифестах операторы if, которые требуют, чтобы этот факт имел определенное значение.

1
ответ дан 3 December 2019 в 09:22

Вы можете добавить в свои плагины условные обозначения, чтобы проверить различные вещи перед добавление фактов, и, кроме того, в 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
0
ответ дан 3 December 2019 в 09:22

Теги

Похожие вопросы