Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

332
Visualizações
Chef: pasa valor de un recurso a otro recurso

Aquí hay una parte de mi código Chef Ruby y estoy tratando de pasar un valor de un bloque a otro bloque. Tenemos múltiples puertos ejecutándose en el servidor, el siguiente código verificará el puerto y, si no se está ejecutando, intentará ejecutar el segundo bloque. Adjunto el código y el error. Por favor, ayuda donde me estoy equivocando.

 ports.each do |port| bash "Check_port_running_#{port}" do code <<-EOH pidval=$(ps -ef | grep /opt/redis/src/redis-server | grep *:#{port} | grep -vc grep) if (($pidval == 0));then portval_#{port}=true else portval_#{port}=false fi EOH end bash "Starting_redis_after_crash_for_port - #{port}" do only_if { "portval_#{port}" } code <<-EOH rm -f #{port}.pid sudo service redis@#{port} start EOH end end

Error: obtener el siguiente error

 ================================================================================ Error executing action `run` on resource 'bash[Starting_redis_after_crash_for_port - 54321]' ================================================================================ Errno::ENOENT ------------- No such file or directory - portval_54321 Resource Declaration: --------------------- # In /tmp/kitchen/cache/cookbooks/csg_orderservices_redis/recipes/configure.rb 184: bash "Starting_redis_after_crash_for_port - #{port}" do 185: only_if "portval_#{port}" 186: code <<-EOH 187: rm -f #{port}.pid 188: sudo service redis@#{port} start 189: EOH 190: end 191: end Compiled Resource: ------------------ # Declared in /tmp/kitchen/cache/cookbooks/csg_orderservices_redis/recipes/configure.rb:184:in `block in from_file' bash("Starting_redis_after_crash_for_port - 54321") do action [:run] default_guard_interpreter :default backup 5 interpreter "bash" declared_type :bash cookbook_name "csg_orderservices_redis" recipe_name "configure" code " rm -f 54321.pid\n sudo service redis@54321 start\n" domain nil user nil only_if "portval_54321" end
over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

Mi opinión sería evitar el uso de recursos bash para esto. Esto es para garantizar que sus recetas de Chef sean idempotentes y puedan simplificar su código, ya que la mayor parte del trabajo pesado lo realiza el cliente de Chef. Solo uso recursos de bash, powershell, etc. como último recurso.

Aquí está mi sugerencia y ejemplo a continuación:

Cree un archivo de biblioteca llamado redis.rb en su carpeta de bibliotecas dentro del libro de cocina. Prefiero asignar un espacio de nombres a mis bibliotecas para ayudar a organizar mis métodos. Este redis_active? El método se puede usar desde cualquier parte de su libro de cocina donde se incluya este módulo.

bibliotecas/redis.rb:

 # Replace CookbookName with actual cookbook name module CookbookName module Redis include Chef::Mixin::ShellOut def redis_active?(port) cmd = "ps -ef | grep /opt/redis/src/redis-server | grep *:#{port} | grep -vc grep" pid_exists = shell_out(cmd).stdout.strip.to_i return true if pid_exists > 0 end end end

En su receta de redis, el recurso de file solo tomará medidas si redis_active? El método devuelve falso para el puerto especificado, y luego el recurso file convergerá y eliminará el archivo pid. Cuando este recurso converja, notificará al recurso del service que reinicie el servicio del servidor redis inmediatamente.

recetas/redis.rb:

 # Replace CookbookName with actual cookbook name Chef::Resource::File.send(:include, CookbookName::Redis) ports.each do |port| file "/path/to/#{port}.pid" do action :delete not_if { redis_active?(port) } notifies :restart, "service[redis@#{port}]", :immediately end service "redis@#{port}" do action :nothing end end
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda