tutorial software pricing docs automate ruby io chef

ruby - software - ¿Cómo leer el contenido de un archivo en el momento de la ejecución? Chef lee en tiempo de compilación



docs chef io (3)

Encontré una respuesta: ruby_block el código en ruby_block y se ejecutará en tiempo de ejecución.

ruby_block "Check if CURBID Web Manager needs installation" do block do version = "" if File.exists?("#{CWM_HOME_DIR}/appLoader.js") # Read the CWM version from file. f = File.open("#{CWM_HOME_DIR}/appLoader.js") pattern = /Ext/.cwm/.prodVersion = ''(/d+/./d+/./d+/./d+)''/ f.each {|line| if match = pattern.match(line) version = match[1] break end } f.close end end end

Ahora la versión está correctamente poblada del archivo creado en la receta anterior.

Debido a que me encuentro con este error MIXLIB-11 que informé al equipo de Mixlib, necesito encontrar una alternativa, alternativa a Mixlib :: Shellout.

Brevemente sobre el problema:

Aquí hay una declaración que dice "* No es sorpresa: la lectura está sucediendo en el momento de la compilación, pero el recurso remote_file en realidad se crea en el momento de la ejecución. **"

Debido a esta característica, Mixlib::Shellout.new("ls", :cwd => ''/opt/cubrid/share/webmanager'') genera el error " No Mixlib::Shellout.new("ls", :cwd => ''/opt/cubrid/share/webmanager'') ese archivo o directorio " aunque ese directorio se crea en el momento de la ejecución por una receta anterior incluida en esta receta actual.

¿Hay alguna forma de leer un archivo / directorio en el momento de la ejecución?


Si usa recursos personalizados, puede usar el método load_current_value .

action :some_action do load_current_value do if File.exist?(''/var/www/html/index.html'') homepage IO.read(''/var/www/html/index.html'') end if File.exist?(''/var/www/html/404.html'') page_not_found IO.read(''/var/www/html/404.html'') end end end

https://docs.chef.io/dsl_custom_resource.html


Considere un remote_file . Se ejecuta en tiempo de ejecución (ejecución) y también puede funcionar con archivos locales, por ejemplo:

remote_file "Copy file" do path "file:///opt/destination.txt" source "file:///opt/source.txt" owner ''root'' group ''root'' mode 0755 end

Entonces, usar remote_file es un buen trabajo. Al escribir un código personalizado requiere un tiempo y puede ser propenso a errores. Ver también esta respuesta .