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

синтаксическая ошибка стадии марионетки

У меня есть сценарий оболочки для установки пакетов модулей nodejs, которые должны выполняться после установки всех пакетов. Я определил этап "последний" после этапа [main] вот мой код

stage { 'last': }
Stage[main] -> Stage[last]
class npm {
        stage => last,
        file { '/tmp/nodejs.sh':
                 source => 'puppet:///modules/npm/nodejs.sh',
                 ensure => present,                
        }
        exec { 'install web development nodejs packages':
               command => '/tmp/nodejs.sh',
               user => "root",
               require => Package['nodejs', 'npm']
        }
}

Однако он возвращает ошибку

==> по умолчанию: Ошибка: не удалось выполнить синтаксический анализ для производственной среды: Синтаксическая ошибка в '=>'; ожидается '}' в /tmp/vagrant-puppet-/manifests/init.pp:90 на узле local.d ev

строка 90 указывает на "stage => last,"

Вы путаете две концепции, которые, к сожалению, имеют очень похожий синтаксис.

Определение класса

class <name> {
    # includes of other classes ...
    # resource declarations ...
}

Объявление класса

# usually
include <name>
# ...but if you need stages
class {
    '<name>':
        stage => 'last'
}

Последнее известно как объявление класса ресурсоподобного (и в нем есть предостережения).

Также обратите внимание, что этапы в некоторой степени осуждаются в сообществе.

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

Package<| |> -> Exec['install web development nodejs packages']

Это устанавливает before отношение от всех package ресурсы для вашего exec.