1 votes

Chef 12.5 Ressources personnalisées - Accès aux ressources dans les recettes

J'écris un livre de recettes qui utilise les ressources personnalisées présentes dans Chef 12.5. J'ai une ressource personnalisée qui utilise une ressource modèle et qui, en tant que telle, a une valeur de notifie qui recharge le service associé.

Cependant, le service associé est géré dans la recette principale. Actuellement, cela échoue car il se plaint qu'il n'y a pas de service.

Dans les versions précédentes, lors de l'utilisation de LWRP, ce problème était causé par l'utilisation de utilisation_des_ressources_en_ligne Je pense que vous pouvez contourner ce problème particulier en n'incluant pas cette fonction dans votre LWRP.

Je n'inclus PAS cette ligne dans ma ressource personnalisée mais le comportement est présent. Existe-t-il un moyen de désactiver ce comportement ?

Sinon, existe-t-il un autre moyen d'"inclure" le service dans plusieurs ressources afin d'éviter d'avoir le même code à plusieurs endroits ?

4voto

ZeverMX Points 11

Sur la base de la réponse delerious010, un collègue et moi-même avons pu trouver une solution plus agréable pour cette situation particulière :

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

Évidemment, cet exemple ne gère qu'une seule ressource, mais il devrait vous permettre d'en avoir plusieurs et de ne notifier que celles que vous voulez.

EDIT : Notez que ceci repose sur un bug ( https://github.com/chef/chef/issues/4669 ) que les développeurs Chef vont corriger. Étant donné que dans la version 12.9.38, les recherches sur la collection de ressources ont été effectuées de manière à remonter jusqu'aux contextes d'exécution externes, ce code fonctionnera toujours, mais ne sera plus nécessaire (et gérera correctement les sous-contextes imbriqués multiples où vous devez saisir une ressource dans la racine et pas seulement dans le contexte d'exécution parent). La meilleure solution ici devrait simplement être de mettre à jour.

2voto

jonathanserafini Points 1728

Dans Chef 12.5, use_inline_resources est activé par défaut. Cela a pour effet que, chaque fois qu'une sous-ressource est mise à jour, le LWRP sera signalé comme ayant été modifié. En tant que tel, vous pouvez toujours faire en sorte que la notification de la ressource soit définie sur le LWRP "parent".

Ou, si vous souhaitez que la clause de notification soit définie pour toutes les instances de votre LWRP, vous pouvez toujours créer la notification directement dans le bloc d'action :

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

Toutefois, n'oubliez pas que tout modifiée dans votre LWRP entraînerait le redémarrage du service. Bien qu'il puisse être possible d'utiliser l'appel aux ressources pour définir une notifies de la ressource enfant. Je ne suis pas tout à fait sûr, car je ne l'ai pas encore testé.

0voto

lamont Points 133

Dans la version 12.9.38, la possibilité de notifier à partir d'un fournisseur de sous-ressources-collection / use_inline_resources vers une ressource-collection externe a été ajoutée par :

https://github.com/chef/chef/commit/0ca27b6f30ccd327505bd3a44bd319fb3eba956b

C'est maintenant le comportement par défaut des notifications, vous ne devriez donc avoir besoin que d'une mise à jour.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X