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

Неожиданный порядок уведомления Puppet

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

# /root/learning-manifests/2.file.pp

file {
  '/tmp/test1':
  ensure        => present,
  content => "Hi.",
}

file {
  '/tmp/test2':
  ensure     => directory,
  mode => 0644,
}

file {
  '/tmp/test3':
  ensure       => link,
  target => '/tmp/test1',
}

notify {
  "I'm notifying you.":
}

notify {
  "So am I!":
}

Мой ожидаемый результат:

notice: I'm notifying you.
notice: /Stage[main]//Notify[I'm notifying you.]/message: defined 'message' as 'I'm notifying you.'
notice: So am I!
notice: /Stage[main]//Notify[So am I!]/message: defined 'message' as 'So am I!'

Мой фактический результат:

notice: So am I!
notice: /Stage[main]//Notify[So am I!]/message: defined 'message' as 'So am I!'
notice: I'm notifying you.
notice: /Stage[main]//Notify[I'm notifying you.]/message: defined 'message' as 'I'm notifying you.'
notice: Finished catalog run in 0.06 seconds

Может кто-нибудь объяснить, почему мои уведомления переносятся.

Спасибо.

Как написано в эта вики-страница PuppetLabs о порядке кукол:

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

Вы должны использовать before, require, notify, subscribe, чтобы определить зависимости между ресурсами в ваших манифестах. Кроме того, вы можете определить свои зависимости, связав ссылки на ресурсы. Например:

notify {
  "I'm notifying you.":
}
-> 
notify {
  "So am I!":
}

Чтобы гарантировать порядок выполнения в марионетке, вам нужна некоторая иерархия классов.

Определения внутри одного класса могут выполняться в любом порядке, вы не можете на это повлиять.