3 votes

Dans Puppet, y a-t-il un moyen de ne pas réaliser les ressources virtuelles avec des collections, uniquement avec le rôle de realization?

En marionnette, il est possible de réaliser des ressources virtuelles avec la fonction realize ou avec des collections.

J'aimerais savoir s'il est possible de réaliser des ressources uniquement avec la fonction realize. Par exemple simplifié, je voudrais que dans le manifeste suivant, nginx ne soit pas installé, sauf en incluant le module nginx_conf, qui contient un realize implicite.

@package { 'nginx':
  ensure => present,
}

class nginx_conf {
  realize Package['nginx']

  file { '/etc/nginx/conf.d/foo':
    ensure => present,
    require => Package['nginx'],
  }
}

exec { 'apt-get update': path => '/usr/bin' }

Exec['apt-get update'] -> Package <| |>

Des idées?

Une option est de mettre le package à l'intérieur d'une classe séparée qui est requise par le module qui va la réaliser, mais j'aimerais savoir s'il y a un moyen de sélectionner des ressources virtuelles dans les collections uniquement si elles sont réalisées, et de ne pas les réaliser uniquement en étant incluses dans les collections.

2voto

ptoinson Points 695

Il ne semble pas y avoir de moyen complet d'empêcher Package <| |> de réaliser des ressources. Cela pourrait être une solution partielle :

@package { 'nginx':
  ensure  => present,
  tag     => optional,
  require => Exec['apt-get update'],
}

Exec['apt-get update'] -> Package <| tag != optional |>

Vous devriez définir des exigences pour chaque Package virtuel, alors.

Le problème sous-jacent peut cependant être résolu en utilisant des étapes d'exécution :

class update-apt {
  exec { 'apt-get update': path => '/usr/bin' }
}

stage { 'first': before => Stage['main'] }
class {'update-apt':
  stage => 'first',
}

Toutes les classes et ressources sont exécutées par défaut dans la phase principale, donc Exec['apt-get update'] est toujours exécuté avant toutes les ressources Package.

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