Кукольный Поток Выполнения - PullRequest
5 голосов
/ 02 марта 2012

У меня есть этот node.pp, и мне интересно, как кукла выполнит его.

node 'agent.puppet.demo' {
    include ssh
    include postfix
    include mysql
    include apache
}

На узле агента, когда я запускаю это:

$ puppetd -t -d

Марионетка не выполняет ее последовательно, то есть она не выполняет сначала ssh, затем постфикс, ...

Кто-нибудь знает, почему это так? Это потому, что он называется «декларативным языком», где порядок исполнения не имеет большого значения?

Если это так, то я могу просто определенным образом объявить, что я хочу, и кукольный выяснит, как это выполнить?

Ответы [ 2 ]

17 голосов
/ 02 марта 2012

Отказ от ответственности: я являюсь одним из разработчиков Puppet.

Он будет выполнять его в согласованном, но непредсказуемом порядке, за исключением любых явных или неявных зависимостей в коде.Явные зависимости - это то, что вы указываете с метапараметрами subscribe или require.Неявные зависимости происходят от функции autorequire , которая позволяет автоматически применять файловые ресурсы в разумном порядке.

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

Например, для большинства людей действительно нет большой связи между управлением ssh и управлением postfix - вы могли бы сделать работув любом порядке, или даже в одно и то же время, и все будет работать одинаково.

Это освобождает нас от необходимости улучшать вещи во многих отношениях, а «все в линейном порядке» - нет.Мы работаем, например, для пакетной установки пакетов, при этом соблюдая явные зависимости вне пакетов.

Итак, порядок выполнения и зависимости следуют за основной проблемой, и мы сохранили это свойство, чтобы иметь возможностьделайте больше удивительных вещей.

Цель - именно то, что вы говорите в конце: чтобы вы заявили, чего хотите, и мы позаботимся обо всех деталях, чтобы получить это там.Со временем мы надеемся быть намного умнее с логическими зависимостями, поэтому вы должны сказать еще меньше, чтобы получить это тоже.

3 голосов
/ 02 марта 2012

Отказ от ответственности: я все еще довольно новичок в марионетке:)

Ключ должен думать обо всем с точки зрения зависимостей.Для зависимостей классов мне нравится использовать синтаксис Class ['a'] -> Class ['b'].Скажем, у вас есть класс Tomcat, который требует класс JDK, который загружает / устанавливает Sun JDK из оракула.В вашем классе tomcat вы можете указать это с помощью

Class ['jdk'] -> Class ['tomcat']

В качестве альтернативы вы можете объявить класс с мета-параметром require вместовключают в себя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...