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

Ошибка марионетки при тестировании манифеста

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

У меня есть мастер марионеток (3.0.2-1; RHEL6), а файл /etc/puppet/manifests/site.pp содержит следующее:

import 'nodes/nodes.pp'
$puppetserver = 'puppet.example.dom'

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

Файл nodes / nodes.pp содержит:

node 'agent1.example.dom' {
    include users,
}

Класс пользователей находится в / etc / puppet / modules / users. Файл manifest / init.pp содержит:

class users {
    group { 'admins':
        ensure => 'present',
        gid    => '501',
    }
    user { 'user1':
        ensure           => 'present',
        uid              => '10000',
        gid              => '501',
        home             => '/home/user1',
        password_max_age => '60',
        password_min_age => '1',
        shell            => '/bin/bash',
    }
}

Если я удалю строку «включить пользователей» из файла nodes.pp, каталог будет применен:

Info: Retrieving plugin
Info: Caching catalog for agent1.example.dom
Info: Applying configuration version '1357858753'
Notice: Finished catalog run in 0.02 seconds

Однако, когда я включаю его, появляется следующая ошибка:

[root@agent1 ~]# puppet agent --test --noop
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not 
parse for environment production: Syntax error at '}' at 
/etc/puppet/manifests/nodes/nodes.pp:3 on node agent1.example.dom
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

Это заставляет меня думать, что у меня есть синтаксическая ошибка в файле init.pp, но я не могу понять, что это было бы. Может быть, у меня это неправильно настроено или я неправильно связываю различные части?

Я пробовал без запятой в файле nodes.pp, а также с. Я также пробовал без запятой в последней строке файла init.pp пользователя, а также с. Я пробовал с пустой строкой между определением группы и определением пользователя. Я получаю тот же результат независимо от того, какие незначительные изменения я делаю.

Я также пробовал поместить определение узла непосредственно в файл site.pp, но возникла та же ошибка. Просто из другого места, чем раньше (site.pp vs nodes / nodes.pp).

Подключение к серверу было проверено с помощью telnet от агента 1 к порту 8140 на мастере марионетки.

Любые идеи? Агент тоже v3.0.2-1, но RHEL5. Я еще не тестировал агент RHEL6.

РЕДАКТИРОВАТЬ: я провел тест с параметром --debug. Результат здесь: http://pastebin.com/zNs5DvCD

РЕДАКТИРОВАТЬ 2: я не объявлял класс / модуль, прежде чем пытаться это сделать. Я сделал это с puppet apply /etc/puppet/modules/users/manifests/users.pp (после изменения имени файла). Теперь это дает мне следующую ошибку:

[root@agent1 puppet]# puppet agent --test --noop
Info: Retrieving plugin
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not 
find class users for agent1 on node agent1
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

Итак, что-то изменилось. Синтаксическая ошибка исчезла, но класс не найден.

Я разместил это в http://ask.puppetlabs.com как предложила Сирекс в чате. Было указано, что я переименовал манифест файлового модуля в users.pp, но это должен был быть init.pp в соответствии с автоматической загрузкой классов и подклассов, встроенной в Puppet.

удалить , после include users - это только один, который я могу увидеть на глаз.

ты должен уметь идти с ensure => present также

попробуйте парсер марионеток проверить .pp

попробуй кукольный пух

Во-первых, вы должны переименовать класс обратно в init.pp, иначе Puppet не сможет его найти.

Во-вторых, запуск puppet apply с файлом, в котором определен класс, не ничего. Если вы хотите использовать puppet apply для тестирования своих классов, вы можете поместить это в tests / init.pp.

include users

Затем вы можете протестировать класс с помощью:

puppet apply modules/users/tests/init.pp

В-третьих, за оператором include (nodes.pp) нужно идти.

С уважением, Гер.