Назад | Перейти на главную страницу

Использование операторов case с уведомлением в Puppet

class mymodule::scripts::os_check {
  case $operatingsystem  {
    /(?i-mx:centos)/: { notify("You are using CentOS")}
    /(?i-mx:.*)/: { notify("You are using non-CentOS OS") }
  }
}

Почему это выполняется без ошибок, но не отображает ни одного уведомления (на сервере, где факт операционной системы == CentOS)?

Я запускаю это как автономный скрипт с использованием puppet apply os-check.pp и просто вижу уведомление о запуске каталога.

Попробуй это:

class mymodule::scripts::os_check {
  case $::operatingsystem  {

    'CentOS': {
      notify {'You are using CentOS': }
    }

    default: {
      notify {'You are using non-CentOS OS': }
    }
  }
}

Несколько пунктов, в произвольном порядке, со ссылками в скобках, где это необходимо:

  • Вы должны использовать одинарные кавычки для всех строк, которые не содержат интерполяцию переменных (Кукольный пух).
  • Всегда лучше сопоставлять фактические значения, когда вы их знаете - есть ли какая-то конкретная причина, по которой вы пытаетесь сопоставить с регулярным выражением?
  • В operatingsystem факт должен быть сопоставлен с помощью переменной пространства имен верхнего уровня $::operatingsystem (Кукольный пух)
  • Вы всегда должны предоставлять параметр по умолчанию для любого оператора case (Кукольный пух)
  • Ваш notify синтаксис неверен, вы должны создать экземпляр уведомления ресурс вместо того, чтобы пытаться вызвать его как функцию (Ссылка на тип марионетки)

В дополнение к отличному ответу Крейга вам необходимо:

включить mymodule :: scripts :: os_check

Изменить: в противном случае вы просто определяете класс, а не создаете его.