web-dev-qa-db-fra.com

Comment dire à la marionnette d'installer uniquement à l'aide d'un fichier si un fichier n'existe pas

J'utilise la marionnette pour installer certains Python Packages à l'aide de PIP. J'utilise la marionnette 2.7, alors mes déclarations de colis ressemblent à ceci:

package { "carbon": 
    require => Class["graphite::prereqs::install"],
    ensure  => latest,
    provider => pip,
}

Le problème est que ce paquet et le graphite-web Forfait semble avoir un bogue permettant d'installer la même version plusieurs fois à l'aide de PIP. Donc, si je tape Sudo pip install carbon Plusieurs fois, PIP l'installera à chaque fois. Je croyais ceci est un bug avec les paquets.

Ce bogue semble confondre aussi la marionnette, car chaque fois que je dispose mon système, carbon et graphite-web sont réinstallés.

Je me demande donc s'il y a un moyen de contourner ce problème d'emballage apparent. J'ai essayé ce qui suit:

package { "carbon": 
    require => Class["graphite::prereqs::install"],
    ensure  => latest,
    provider => pip,
    creates => "/opt/graphite/bin/carbon-cache.py",
}

... mais je ne peux pas utiliser Create. Y a-t-il une autre façon que je puisse dire à la déclaration de package de rechercher un fichier avant d'installer le package?

6
Tom Purl

Je n'ai pas testé mais essayez ceci:

file { "/opt/graphite/bin/carbon-cache.py":
    ensure => 'absent',
}

package { "carbon": 
    require => [ Class["graphite::prereqs::install"], 
                 File["/opt/graphite/bin/carbon-cache.py"]
               ]
    ensure  => latest,
    provider => pip,
}
1
quanta