Como provisionar uma VM vagrant com Chef e um arquivo .rb preenchido com instruções

Como provisionar uma VM vagrant com Chef e um arquivo .rb preenchido com instruções

Provavelmente entendi todo o conceito errado: tenho uma VM Vagrant funcionando com Ubuntu 12.04, além disso quero instalar alguns pacotes e arquivos de configuração. Eu os configurei no Chef, no caminho cookbooks/my_project/recipes eu tenho um arquivo vagrant-dev.rb com todas as instruções. Agora minha configuração do Vagrant no Vagrantfile deve ser o problema aqui:

config.vm.provision :chef_solo do |chef|
    chef.cookbooks_path = "cookbooks/my_project/recipes"
    chef.add_recipe "vagrant-dev.rb"
end

e quando carrego a VM recebo

FATAL: Chef::Exceptions::CookbookNotFound: Cookbook vagrant-dev.rb not found.

Tentei sem o .rb no final. Acho que é uma questão completamente diferente e não estou usando da maneira correta. Mas depois de pesquisar não consegui encontrar nada que explicasse como fazer isso corretamente.

Responder1

Ao usar chef, todas as receitasdeveestar em livros de receitas. Parece que você já o tem em um livro de receitas e está apenas chamando-o de errado, mas abordarei tudo para que você possa verificar novamente.

Os livros de receitas são literalmente apenas uma coleção de arquivos rb de receitas, um pouco de metadados e, opcionalmente, alguns outros arquivos (como modelos ou databags). Portanto, você não pode incluir o arquivo .rb diretamente, é necessário fazer referência ao seu livro de receitas e, em seguida, ao nome do arquivo (sem .rb) para executá-lo.

A estrutura de um livro de receitas simples deve ser semelhante a:

SomeCookbook
    readme.md # needed for the long_description in metadata to work
    metadata.rb # contains the actual information for the cookbook
    recipes # Holds all the cookbook's recipies
        default.rb # This is the default recipe, run if one isn't specified
        otherRecipe.rb
    templates # Templates that can be called by the cookbook
        default
            some-erb-style-template.erb

O nome do diretório principal não importa e o diretório de modelos é opcional.

metadata.rb

name             "SomeCookbook"
maintainer       "Me"
maintainer_email "[email protected]"
license          "None"
description      "Does something cool"
long_description IO.read(File.join(File.dirname(__FILE__), 'readme.md'))
version          "0.0.1"

supports "centos"

Siga a estrutura acima e certifique-se de colocar sua receita na pasta de receitas.
Em seguida, adicione isto ao seu arquivo vagrant:

chef.add_recipe "SomeCookbook::vagrant-dev"

Espero que o que foi dito acima esclareça um pouco as coisas.

informação relacionada