Puppet & Facter - как определить, работает ли Cent 6 или Cent 5

Как бы вы использовали facter и puppet, чтобы определить, работает ли ОС Cent 6.x или Cent 5.x?

facter operatingsystemrelease 
6.4

Я забочусь только о главном релизе (6)

Я думал об использовании awk, но должен быть лучший способ, более дружественный к "манифестам марионеток".

   #This works, but is ugly trying to use this in a puppet manifest

facter operatingsystemrelease |awk -F. '{print $1}'
6

Обновление:

Похоже, что более новые версии facter содержат дополнительную информацию о главных релизах, которых нет в моей версии. Мое начальное обеспечение должно предполагать, что фактор устарел.

facter --version
1.6.4
puppet --version
2.7.20

Я попытался найти любые дополнительные факты, которые могли бы показать основной выпуск, с помощью следующей команды

facter |grep 6

3 ответа

Решение

Есть операционная система может выпустить

% facter operatingsystemmajrelease
6

Если у вас установлен пакет redhat-lsb-core, facter также получит семейство фактов, предоставленных lsb (включая lsbmajdistrelease):

% facter |grep ^lsb
lsbdistcodename => Final
lsbdistdescription => CentOS release 6.4 (Final)
lsbdistid => CentOS
lsbdistrelease => 6.4
lsbmajdistrelease => 6
lsbrelease => :base-4.0-amd64:base-4.0-noarch:core-4.0-amd64:core-4.0-noarch

ПРИМЕЧАНИЕ: вам нужно по крайней мере Facter 1.7 для того, чтобы иметь operatingsystemmajrelease, Основные факты в Facter 1.6 довольно ограничены.

Я предполагаю, что вы пытаетесь принять какое-то решение, основанное на версии установки.

Вы можете использовать регулярные выражения в вашей логике.

Так что-то вроде:

case $operatingsystemrelease {
    /^6.*/: {
        //do 6.x stuff
    }
    /^5.*/: {
        //do 5.x stuff
    }
}

или если if больше твой стиль:

if $operatingsystemrelease =~ /^6.*/ {
    //do 6.x stuff
}
elsif $operatingsystemrelease =~ /^5.*/ {
   // do 5.x stuff
}

Помните, что все факторные факты доступны в глобальных переменных области действия для ваших манифестов.

Если у вас смешанная среда, вы, вероятно, захотите обернуть это в что-то вроде:

if $operatingsystem == "CentOS" {
}

В Puppet 5.5+ вам следует использовать часть соединения.osфакт какoperatingsystemmajreleaseфакт теперь является унаследованным фактом.

Пример значения этого факта:

      {
    "name": "CentOS",
    "family": "RedHat",
    "release": {
        "full": "7.2.1511",
        "major": "7",
        "minor": "2"
    },
    "selinux": {
        "enabled": false
    },
    "hardware": "x86_64",
    "architecture": "x86_64"
}

Также обратите внимание, что его значение является строкой, а не целым числом, поэтому помните об этом при сравнении:

      case $facts['os']['release']['major'] {
    "6": {
        // do 6.x stuff
    }
    "5": {
        // do 5.x stuff
    }
}
Другие вопросы по тегам