Рейтинг:1

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

флаг cn

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

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

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

  • Версия кукловода: 5.5.10-4ubuntu3
  • На обоих серверах Linux 20.04.
  • Все размещено на AWS

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

узел по умолчанию {
    включить «докер»
    docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }
}

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

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

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

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

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

Ошибка: не удалось получить каталог с удаленного сервера: ошибка 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

включить «докер»
класс { 'докер':
  версия => 'последняя',
}
docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }

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

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

/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
Информация: Использование настроенной среды «производство»
Информация: Получение фактов о плагинах
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: предупреждение: URI.unescape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
Информация: Получение плагина
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: предупреждение: URI.unescape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
Информация: Получение локалей
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/indirector/request.rb:272: предупреждение: URI.unescape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
Ошибка: не удалось получить каталог с удаленного сервера: ошибка 500 на СЕРВЕРЕ: ошибка сервера: ошибка оценки: ошибка при оценке вызова функции, не удалось найти класс :: docker для ip-172-31-21-116.us-east- 2.compute.internal (файл: /etc/puppet/code/environments/production/manifests/init.pp, строка: 1, столбец: 1) на узле ip-172-31-21-116.us-east-2 .compute.internal
Предупреждение: не использовать кеш для отказавшего каталога.
Ошибка: не удалось получить каталог; пропуск бега
/usr/lib/ruby/vendor_ruby/puppet/file_system/uniquefile.rb:126: предупреждение: $SAFE станет обычной глобальной переменной в Ruby 3.0
/usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел
/usr/lib/ruby/vendor_ruby/puppet/file_system/uniquefile.rb:126: предупреждение: $SAFE станет обычной глобальной переменной в Ruby 3.0

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

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

Модуль sudo puppet установить puppetlabs-docker --version 4.1.2

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

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

Ошибка: Не удалось получить каталог с удаленного сервера: Ошибка 500 на СЕРВЕРЕ: Ошибка сервера: Ошибка оценки: Ошибка при оценке заявления о ресурсе, повторяющееся объявление: класс [Docker] уже объявлен; невозможно повторно объявить (файл: /etc/puppet/code/environments/production/manifests/init.pp, строка: 3) (файл: /etc/puppet/code/environments/production/manifests/init.pp, строка: 3, столбец: 1) на узле ip-123-123-123-123.us-east-2.compute.internal
Предупреждение: не использовать кеш для отказавшего каталога.
Ошибка: не удалось получить каталог; пропуск бега

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

Рейтинг:0
флаг ng

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

класс { 'докер':
  версия => 'последняя',
}

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

Более подробная информация доступна здесь: https://forge.puppet.com/modules/puppetlabs/докер

флаг cn
Хорошо. Это полный файл. Ладно. Я изменю имя файла и проверю, что это он. это должно быть на пути, который я указал?
Zhivko Zhelev avatar
флаг ng
обычно это ```/etc/puppetlabs/code/environments/production/manifests/init.pp```
Zhivko Zhelev avatar
флаг ng
Пожалуйста, посмотрите на ответ. Вот как это должно быть написано, попробуйте скопировать/вставить его, и файл не обязательно должен быть именно ```init.pp``` в вашем случае, извините за ошибку.
флаг cn
Спасибо за помощь. Я сделал именно так, как вы написали, перезапустил главный сервер марионеток, запустил sudo puppet agent --test и все еще получаю ту же ошибку. Я не уверен, правильно ли я установил модуль garethr-docker. Я использовал этот CMD: sudo puppet module install garethr-docker. Я должен установить его на мастер или раб? И есть ли способ проверить правильность установки? Или чего-то еще не хватает?
Zhivko Zhelev avatar
флаг ng
Он должен использовать ```r10k``, это встроенный инструмент управления пакетами в puppet, также попробуйте ```sudo puppetrun --noop``` на клиенте и, пожалуйста, дайте вывод. Я понятия не имею, как вы настраиваете кукольную среду, и мне нелегко дать прямой ответ.
флаг cn
Я понимаю. Что ж, я знаю, что почти у цели, потому что я протестировал манифест .pp с другими работающими командами. Например: ``` файл {'/tmp/it_works.txt': обеспечить => настоящее, режим => '0644', content => "Это работает на ${ipaddress_eth0}!\n", }``` - сработало, а также ```service { 'docker': обеспечить => работает, }``` - сработало. Когда я запустил команду, которую вы мне только что прислали (sudo puppet run --noop), она выводит следующее сообщение: /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел Ошибка: неизвестная подкоманда Puppet «выполнить» См. «помощь по марионеткам» для справки по доступным куклам.
флаг cn
Думаю, я должен был запустить это, правильно: sudo puppet agent --noop. Если это были случаи, это то, что появилось для меня: /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел /usr/lib/ruby/vendor_ruby/puppet/util.rb:461: предупреждение: URI.escape устарел /usr/lib/ruby/vendor_ruby/puppet/util.rb:315: предупреждение: устаревший Object#=~ вызывается в Puppet::Transaction::Report; всегда возвращает ноль (продолжается на 3 строки)
Zhivko Zhelev avatar
флаг ng
Хорошо, пожалуйста, запустите это на сервере и агенте ```puppet module install puppetlabs-docker --version 4.1.2``` и повторите попытку с ```puppet agent --test```
флаг cn
Хорошо. Я думаю, что мы развиваемся. Спасибо за помощь.Я установил дополнительные модули как на мастере, так и на агенте. Перезапустил службу puppet master и снова запустил sudo puppet agent --test. Дал мне большее предупреждающее сообщение и другое сообщение об ошибке. Похоже, теперь это может быть проблема синтаксиса. Я отредактировал вопрос и поставил новое предупреждение об ошибке.
Zhivko Zhelev avatar
флаг ng
удалите ```include 'docker'```, и все будет хорошо :) эта строка такая же, как ```class { 'docker':``` обе будут включать ее, просто с первой вы ничего не делаете
флаг cn
Работал! Бесконечно благодарен!

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.