Конфигурация манифеста марионетки для проверки образа докера

Я новичок в devops/ci/cd, так что потерпите.

В настоящее время я настраиваю конфигурацию манифеста марионетки для проверки образа докера. Попробую распланировать:

У меня есть главный сервер марионеток со следующей конфигурацией:

  • Версия Puppetmaster: 5.5.10-4ubuntu3
  • Оба сервера Linux 20.04.
  • Все размещено на AWS

/etc/puppet/code/environments/production/manifests/site.pp

      node default {
    include 'docker'
    docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }
}

Каждый раз, когда я пытаюсь ввести новую команду проверки в .pp, я перезапускаю сервер puppet master с помощью следующей команды: sudo systemctl restart puppet-master

Я установил модуль garethr-docker на оба моих сервера — агент и мастер.

На подчиненном сервере/сервере агента у меня есть и работает этот образ Docker: jorgemauriciodev/ubuntu-dockerfile-dev-v1. На первом этапе я просто хочу проверить, существует ли образ на моем подчиненном сервере. Позже я придумаю, как убедиться, что он работает или собран с помощью Dockerfile.

На подчиненном/агентском сервере я запускаю: sudo puppet Agent –test

И я получаю следующее сообщение об ошибке:

Ошибка: не удалось получить каталог с удаленного сервера: ошибка 500 на СЕРВЕРЕ: ошибка сервера: ошибка оценки: ошибка при оценке вызова функции, не удалось найти класс ::docker для ip-123-123-123-123.us-east-2.compute.internal (файл: /etc/puppet/code/environments/production/manifests/site.pp, строка: 2, столбец: 5) на узле ip-123-123-123-123.us-east-2.compute.internal Предупреждение: не используется кэш в неудачном каталоге. Ошибка: не удалось получить каталог; пропуск пробежки

Кто-нибудь знает, что у меня не так с файлом манифеста марионетки?

Редактировать 1:

Я внес некоторые предложенные изменения. Теперь мой файл имеет другое имя и изменил содержимое: /etc/puppet/code/environments/production/manifests/init.pp

      include 'docker'
class { 'docker':
  version => 'latest',
}
docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }

Все еще возвращает мне то же сообщение об ошибке.

Вот полное сообщение:

      /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: warning: deprecated Object#=~ is called on Puppet::Transaction::Report; it always returns nil
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: warning: deprecated Object#=~ is called on Puppet::Transaction::Report; it always returns nil
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
Info: Using configured environment 'production'
Info: Retrieving pluginfacts
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: warning: deprecated Object#=~ is called on Puppet::Transaction::Report; it always returns nil
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: warning: URI.unescape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
Info: Retrieving plugin
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: warning: deprecated Object#=~ is called on Puppet::Transaction::Report; it always returns nil
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: warning: URI.unescape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
Info: Retrieving locales
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: warning: deprecated Object#=~ is called on Puppet::Transaction::Report; it always returns nil
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: warning: URI.unescape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Function Call, Could not find class ::docker for ip-172-31-21-116.us-east-2.compute.internal (file: /etc/puppet/code/environments/production/manifests/init.pp, line: 1, column: 1) on node ip-172-31-21-116.us-east-2.compute.internal
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
/usr/lib/ruby/vendor_ruby/puppet/file_system/uniquefile.rb:126: warning: $SAFE will become a normal global variable in Ruby 3.0
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: warning: URI.escape is obsolete
/usr/lib/ruby/vendor_ruby/puppet/file_system/uniquefile.rb:126: warning: $SAFE will become a normal global variable in Ruby 3.0

Редактировать 2:

Я установил дополнительные модули на главный сервер и подчиненный/агентный сервер с помощью этой команды:

      sudo puppet module install puppetlabs-docker --version 4.1.2

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

Вот важная часть сообщения.

      Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Resource Statement, Duplicate declaration: Class[Docker] is already declared; cannot redeclare (file: /etc/puppet/code/environments/production/manifests/init.pp, line: 3) (file: /etc/puppet/code/environments/production/manifests/init.pp, line: 3, column: 1) on node ip-123-123-123-123.us-east-2.compute.internal
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

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

1 ответ

Ошибка 500 в puppet означает плохой написанный код. Можете ли вы поделиться всей конфигурацией (init.pp), и я смогу вам рассказать оттуда.

      class { 'docker':
  version => 'latest',
}

docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }

Дополнительную информацию можно найти здесь: https://forge.puppet.com/modules/puppetlabs/docker .

Другие вопросы по тегам