Для того чтобы посмотреть все факты которые сейчас есть на клиенте воспользуемся командой facter -p
Для чего нужны факты можно посмотреть в начале статьи пользователя Badoo.
Пример
Допустим, нам нужно получить вывод команды uname -i для определения разрядности системы. Для этого нам нужно создать факт. Назовем наш факт hardware_platform, и создадим hardware_platform.rb, на Puppet сервере:
{modulepath}
└── {module}
└── lib
└── facter
# hardware_platform.rb Facter.add("hardware_platform") do setcode do Facter::Util::Resolution.exec('/bin/uname -i') end end
Факты в фактах
Мы можем использовать значения фактов при написании своих используя конструкцию Facter.value(“somefact”) или Facter.somefact. При отсутствии факта первый вернет 0, а второй exception.
Facter.add("osfamily") do setcode do distid = Facter.value('lsbdistid') case distid when /RedHatEnterprise|CentOS|Fedora/ "redhat" when "ubuntu" "debian" else distid end end end
Теперь после следующего запуска puppet агента на клиенте, факт станет доступным.
Замечание
На puppet сервере и клиенте в разделе [main] должна присутствовать опция
pluginsync = true
Настройка фактов.
Факты имеют несколько параметров, которые можно использовать для тонкой настройки фактов
Timeout
Если ваш факт ненадежен и не всегда может корректно завершить работу, вы можете использовать timeout. Если время выполнения setcode блока будет превышает timeout, Facter прервет процесс и присвоит факту заданное при ошибке значение.
# Случайный timeout Facter.add(:sleep) do timeout = 10 setcode do if Random.rand(6) == 0 sleep 999999 else "awake" end end end
Кэширование
Если факты некоторое время не изменяются или для их нахождения требуется много времени, их можно закэшировать. Для этого нам нужно добавить опцию ‘:ttl’ при объявлении факта
Facter.add("mylongoperation", :ttl => 600) do setcode do ... операция ... end end
0 — никогда не кэшировать. Поведение по умолчанию.
-1 — Кэш навсегда. Полезно для разовых операций. Например: название дистрибутива.
Важность фактов
У фактов есть параметр — weight (вес). Факты с большим весом выполняются раньше
# Проверяем Facter.add(:role) do has_weight 100 setcode do if File.exist? "/etc/postgres_server" "postgres_server" end end end # Проверяем есть ли бинарник Facter.add(:role) do has_weight 50 setcode do if File.exist? "/usr/sbin/pg_create" "postgres_server" end end end # Если сервер не похож на сервер, значит это десктоп Facter.add(:role) do setcode do "desktop" end end
Ограничение фактов
Мы можем ограничивать выполнение фактов, на основание других фактов с помощью параметра — confine.
Например, найти факт только если ядро системы — Linux
Facter.add(:powerstates) do confine :kernel => "Linux" setcode do Facter::Util::Resolution.exec('cat /sys/power/states') end end
ссылка на оригинал статьи http://habrahabr.ru/post/165543/
Добавить комментарий