Chef 12.5 Recursos personalizados - Acessando recursos em receitas

1

Estou escrevendo um livro de receitas que usa os recursos personalizados presentes no Chef 12.5. Eu tenho um recurso personalizado que usa um recurso de modelo e, como tal, tem um notifica que recarrega o serviço associado.

No entanto, o serviço associado é gerenciado na receita principal. Atualmente, isso falha, pois reclama que não há serviço.

Nas versões anteriores, ao usar LWRPs, isso era causado pelo uso de use_inline_resources , e acredito que você poderia evitar esse problema específico, NÃO incluindo essa função em seu LWRP.

Agora, NÃO estou incluindo essa linha em meu recurso personalizado, mas o comportamento está presente. Existe alguma maneira de desligar esse comportamento?

Alternativamente, existe alguma outra maneira de "incluir" o serviço em vários recursos, para que eu não tenha o mesmo código exato em muitos lugares?

    
por kemra102 14.10.2015 / 22:15

3 respostas

3

Com base na resposta de delerious010, eu e um colega conseguimos criar um trabalho melhor para essa situação específica:

action :create do
  global_nginx = resources('service[nginx]')

  template "/etc/nginx/conf.d/#{name.tr(' ', '_')}.conf" do
    cookbook 'nginx_server'
    source 'server_block.conf.erb'
    owner 'root'
    group 'root'
    mode '0644'
    variables(
      listen: listen,
      server_name: real_server_name,
      root: root,
      index: index,
      config: config
    )
    notifies :reload, global_nginx, :delayed
  end
end

Obviamente, este exemplo tem apenas um único recurso sendo gerenciado, mas deve permitir que você tenha vários e apenas notifique os que deseja.

EDIT: Note que isto depende de um bug ( link ) que os Chefes de Desenvolvedores irão corrigir. Porque em 12.9.38 buscas na coleção de recursos foram feitas para recursar para outer run_contexts este código ainda funcionará, mas não será mais necessário (e irá tratar corretamente subcontextos multivididos onde você precisa pegar um recurso na raiz e não apenas o pai run_context). A melhor solução aqui deveria ser apenas atualizar.

    
por 16.10.2015 / 17:03
2

No Chef 12.5, use_inline_resources está ativado por padrão. Isso tem o efeito de que, sempre que um sub-recurso for atualizado, o LWRP será sinalizado como tendo sido alterado. Como tal, você pode sempre ter a notificação de recursos definida no LWRP "pai".

Ou, se quiser que a cláusula de notificação seja definida para todas as instâncias do seu LWRP, você sempre poderá criar a notificação diretamente no bloco de ação:

notifies_delayed(:restart, resources("service[rsyslog]"))

No entanto, tenha em mente que qualquer recurso modificado dentro do seu LWRP faria com que o serviço fosse reiniciado. Embora seja possível usar a chamada para recursos para definir uma propriedade notifies no recurso filho. Não totalmente certo, pois ainda não testei isso.

    
por 16.10.2015 / 01:41
0

Em 12.9.38, a capacidade de notificar de um provedor sub-resource-collection / use_inline_resources para uma resource_collection externa foi adicionada por:

link

Agora, esse é o comportamento padrão das notificações, por isso você só precisa atualizar.

    
por 26.04.2016 / 17:43