Префикс: я искал это, но из-за того, что существует множество вещей, которые могут вызвать эту проблему, я не смог найти решения для этого конкретного случая.
У меня есть мастер марионеток (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) нужно идти.
С уважением, Гер.