Devo usar este hack simples para trabalhar em torno da falta de suporte ao ambiente do chef-solo?

6

A falta de suporte ao ambiente do chef-solo parece ser bastante controversa. Por um lado, uma das características dos ambientes é a capacidade de fixar livros de receitas para ambientes específicos, e isso não faz absolutamente nenhum sentido com o chef-solo. Por outro lado, muitos de nós gostariam de poder mesclar em atributos de nível de ambiente e usar listas de execução específicas do ambiente ao testar com o Vagrant. E acho que encontrei uma maneira simples de contornar o problema. Supondo que eu use a sintaxe do JSON em todos os meus ambientes e funções, e me ater à seguinte convenção para definir atributos (da menor para a mais alta precedência):

  1. padrão nos arquivos de atributos do livro de receitas
  2. padrão em arquivos de função
  3. substituir em arquivos de ambiente

Parece que eu posso apenas analisar esses arquivos e injetar os atributos em chef-solo usando a opção -j. Por exemplo, eu poderia fazer algo assim no meu Vagrantfile:

chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json")
chef.json = chef_env_conf["override_attributes"]

Como os atributos definidos pela opção -j são aplicados no nível de prioridade normal , pode ser outra maneira de substituir os padrões de função, e isso pode ser tudo o que você precisa em um contexto em que o ambiente não é enviado automaticamente.

Você pode fazer algo semelhante para obter listas de execução por ambiente (analisando os arquivos de função):

chef_role_conf = parse_json("./roles/#{role}.json")
chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']]

Eu percebo que este não é o hack mais elegante, mas parece que pode ser uma solução viável para algumas pessoas. Alguém acha que é uma má ideia?

    
por Mike 14.02.2013 / 17:39

1 resposta

2

O Chef 11.6.0 finalmente adicionou suporte para ambientes no chef-solo.

    
por 25.10.2013 / 20:15