que mujer hace funciones entre diferencia dibujo cocinero cheff carrera caracteristicas chef
Jetty Hightide

mujer - funciones del chef



Cómo mover/copiar archivos localmente con Chef (8)

Todavía no he encontrado un recurso de Chef que copie / mueva archivos localmente. Por ejemplo, quiero descargar Jetty Hightide y descomprimirlo. Una vez hecho esto, copie todos los archivos en una carpeta particular, como esto:

# mv /var/tmp/jetty-hightide-7.4.5.v20110725/* /opt/jetty/

BTW, jettyhightide cuando está descomprimido, te da una carpeta y dentro de esa carpeta se encuentran el resto de los archivos. Por lo tanto, unzip jetty-hightide-7.4.5.v20110725.zip -d /opt/jetty/ es inútil porque creará un directorio /opt/jetty/jetty-hightide-7.4.5.v20110725/* mientras que lo que realmente quiero es /opt/jetty/* . Por lo tanto, estoy buscando un recurso local de copiar / mover en Chef.


Cómo copiar un solo archivo

Primera forma

Yo uso file declaración del file para copiar el archivo (verificación en tiempo de compilación)

file "/etc/init.d/someService" do owner ''root'' group ''root'' mode 0755 content ::File.open("/home/someService").read action :create end

aquí :

  • "/etc/init.d/someService" - archivo de destino,
  • "/home/someService" - archivo fuente

También puede envolver ::File.open("/home/someService").read en bloque lazy

... lazy { ::File.open("/home/someService").read } ...

Segunda vía

Declaración del remote_file usuario (verificación en tiempo de ejecución)

remote_file "Copy service file" do path "/etc/init.d/someService" source "file:///home/someService" owner ''root'' group ''root'' mode 0755 end

Tercera vía

También puedes usar shell / batch.

Para cada directorio

Dir[ "/some/directory/resources/**/*" ].each do |curr_path| file "/some/target/dir/#{Pathname.new(curr_path).basename}" do owner ''root'' group ''root'' mode 0755 content lazy { IO.read(curr_path, mode: ''rb'').read } action :create end if File.file?(curr_path) directory "/some/target/dir/#{File.dirname(curr_path)}" do path curr_path owner ''root'' group ''root'' mode 0755 action :create end if File.directory?(curr_path) end

Esto es solo una idea, porque las subrutas en este ejemplo no se manejan correctamente.


Además de la forma en que lo has hecho y aceptado, si solo quisieras ejecutar un comando como pediste inicialmente (copiar o mover), y no ejecutar un bloque de comandos, entonces podrías hacerlo con el recurso de execute :

execute "copy_core" do command "mv /var/tmp/jetty-hightide-7.4.5.v20110725 /opt/jetty" user "root" end

Tal vez esto ayude a alguien más a ver esto en el futuro.


Lo tengo funcionando usando el recurso bash la siguiente manera:

bash "install_jettyhightide" do code <<-EOL unzip /var/tmp/jetty-hightide-7.4.5.v20110725.zip -d /opt/jetty/ mv /opt/jetty/jetty-hightide-7.4.5.v20110725/* /opt/jetty/ cp /opt/jetty/bin/jetty.sh /etc/init.d/jetty update-rc.d jetty defaults EOL end

Pero realmente esperaba una forma de chef para hacerlo. Copiar / mover archivos localmente sería la tarea más genérica que un administrador de sistemas deberá realizar.


Podrías darle una oportunidad al libro de cocina ark . Esto extrae el archivo para usted y luego observa un recurso de execute .


Realmente usaría algo como lo siguiente (aviso "binread") ya que esto funcionaría para archivos de texto y archivos binarios. el uso de "lectura" arrojaría resultados sorprendentes con los archivos binarios, especialmente si utiliza sistemas Windows y Unix.

file destination do content IO.binread(source) action :create end


Sé que esta pregunta ya ha sido respondida y discutida, pero aquí está el método que utilizo al crear archivos.

  1. Primero incluya el archivo en la carpeta de archivos / recetas del libro de recetas
  2. Luego, en su receta, use el recurso cookbook_file .

p.ej:

cookbook_file "/server/path/to/file.ext" do source "filename.ext" owner "root" group "root" mode 00600 action :create_if_missing end

De la documentación del chef: http://docs.opscode.com/resource_cookbook_file.html

El recurso cookbook_file se utiliza para transferir archivos desde un subdirectorio de los archivos / directorio en un libro de cocina a una ruta específica que se encuentra en el host que ejecuta el cliente-chef o chef-solo.


Si su receta ya está vinculada a Windows, puede usar scripts incrustados de PowerShell, como este:

# Copy files from "C:/foo/lib" to "C:/foo" powershell_script "copy_lib" do code <<-EOH $ErrorActionPreference = "Stop" Get-ChildItem -Path "C:/foo/lib" -File | Foreach-Object { Copy-Item -Path $_.Fullname -Destination "C:/foo" -Force } EOH end # Delete "C:/foo/lib" folder powershell_script "delete_lib" do code <<-EOH $ErrorActionPreference = "Stop" Remove-Item -Path "C:/foo/lib" -Recurse EOH end


Para copiar archivos localmente en CHEF

file "C:/Users/Administrator/chef/1.xml" do ---> tar content lazy { IO.read("C:/Users/Administrator/chef-repo/cookbooks/2.xml") } -->src action :create end