Usando o remote_file do Chef com o conteúdo bruto do GitHub

Chef é uma ferramenta de gerenciamento de configuração realmente incrível, e pode haver momentos em que você queira aproveitá-lo para colocar arquivos de fontes que não são suas em um sistema de destino.

Pode ser muito benéfico aproveitar recursos que não estão localizados em seu ambiente, uma vez que pode ser um recurso pelo qual você não é responsável. Em alguns casos, podem ser arquivos localizados no GitHub .

O Chef fornece um gitrecurso para fazer check-out de um repositório em um determinado local, mas isso pode ser um exagero se tudo o que você deseja é um único arquivo.
Outra opção seria copiar o arquivo inteiro para o seu livro de receitas e usar com o cookbook_filerecurso, no entanto, isso polui seu livro de receitas com um código pelo qual você pode não ser responsável, bem como pode nunca ser atualizado quando o arquivo fonte é atualizado.

O Chef fornece um recurso remote_file que possui um monte de sinalizadores padrão lógicos e é construído para recuperar arquivos de locais remotos, como URLs HTTP, FTP e muito mais.

Como o GitHub fornece conteúdo por meio de HTTP (s), usarei esse endpoint.

Aqui está um exemplo de um remote_filerecurso para recuperar a ferramenta ps_mem escrita por P. Brady .

remote_file '/usr/local/bin/ps_mem' do
source
'https://raw.githubusercontent.com/pixelb/ps_mem/master/ps_mem.py'
owner
'root'
group 'root'
mode
'755'
end

Isso é bastante simples – fornecemos um sourceatributo informando ao recurso onde procurar o arquivo, bem como o atributo ‘nome’ do destino de destino , e definimos alguns atributos para permissões e execução./usr/local/bin

Quando Chef executa este recurso pela primeira vez, ele executa uma solicitação HTTP GET para o servidor da web que hospeda o source, faz o download para um local, calcula uma soma de verificação e armazena alguns metadados sobre o arquivo, finalmente colocando-o no destino correto e definir as permissões e o modo./tmp

Isso pode ser visto por meio de um log de depuração de uma execução inicial deste recurso específico.

Esta é uma versão mais bonita do arquivo de metadados em cache, localizado em :/var/chef/cache/remote_file/<url>-<hash of url>.json

{
"etag":""64d86a121a11f2ead5cfff2e2702e0ab3f4441f6""""