Eu sou muito novo em devops/ci/cd, então tenha paciência comigo.
Atualmente, estou obtendo uma configuração de manifesto de marionete configurada para verificação de imagem do docker. Deixe-me tentar fazer o layout:
Eu tenho um servidor puppet master com a seguinte configuração:
- Versão do Puppetmaster: 5.5.10-4ubuntu3
- Ambos os servidores são linux 20.04
- Tudo hospedado na AWS
/etc/puppet/code/environments/production/manifests/site.pp
node default {
include 'docker'
docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }
}
Toda vez que tento um novo comando de verificação no .pp, reinicio o servidor puppet master com o seguinte comando: sudo systemctl restart puppet-master
Instalei um módulo chamado garethr-docker em ambos os meus servidores – o agente e o mestre.
No servidor slave/agente, tenho esta imagem do docker de imagem presente e em execução: jorgemauriciodev/ubuntu-dockerfile-dev-v1 Para a primeira etapa, quero apenas verificar se a imagem existe no meu servidor slave. Mais tarde, descobrirei se ele está sendo executado ou construído com o Dockerfile.
No servidor slave/agente, eu corro: sudo puppet agent –test
E recebo a seguinte mensagem de erro:
Erro: Não foi possível recuperar o catálogo do servidor remoto: Erro 500 no SERVER: Erro do servidor: Erro de avaliação: Erro ao avaliar uma chamada de função, não foi possível encontrar a classe ::docker para ip-123-123-123-123.us-east- 2.compute.internal (arquivo: /etc/puppet/code/environments/production/manifests/site.pp, linha: 2, coluna: 5) no nó ip-123-123-123-123.us-east-2 .compute.internal Aviso: Não usando cache no catálogo com falha Erro: Não foi possível recuperar o catálogo; pulando corrida
Alguém tem alguma idéia sobre o que estou errando com o arquivo de manifesto do fantoche?
Editar 1:
Fiz algumas alterações que foram sugeridas. Agora, meu arquivo tem um nome diferente e mudou o conteúdo: /etc/puppet/code/environments/production/manifests/init.pp
include 'docker'
class { 'docker':
version => 'latest',
}
docker::image { 'jorgemauriciodev/ubuntu-dockerfile-dev-v1': }
Ainda me retorna essa mesma mensagem de erro.
Segue a mensagem completa:
/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
Edição 2:
Instalei outros módulos no servidor mestre e no servidor escravo/agente com este comando:
sudo puppet module install puppetlabs-docker --version 4.1.2
E ainda está me retornando uma mensagem de erro, mas agora parece que é diferente. Então, provavelmente um problema de sintaxe agora.
Aqui está a parte importante da mensagem.
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
Além desta mensagem, ainda está me retornando esses avisos, mas a lista é muito maior. No entanto, não acho que seja uma preocupação neste momento.
Erro 500 no fantoche significa código mal escrito, você pode compartilhar toda a configuração (init.pp) e eu posso dizer a partir daí.
Mais informações estão disponíveis aqui: https://forge.puppet.com/modules/puppetlabs/docker