Como dizer ao Puppet para instalar somente usando o Pip se um arquivo não existir

6

Estou usando o Puppet para instalar alguns pacotes do Python usando o pip. Estou usando o Puppet 2.7, então minhas declarações de pacotes são parecidas com isso:

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

O problema é que este pacote e o pacote graphite-web parecem ter um bug que torna possível instalar a mesma versão várias vezes usando o pip. Então, se eu digitar sudo pip install carbon várias vezes, o pip irá instalá-lo sempre. Eu acredito que isso é um bug com os pacotes.

Esse bug também parece confundir Puppet, porque toda vez que eu provisiono meu sistema, carbon e graphite-web são reinstalados.

Por isso, estou me perguntando se há uma maneira de contornar esse aparente bug de empacotamento. Eu tentei o seguinte:

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

... mas não posso usar cria. Existe outra maneira que eu posso dizer a declaração do pacote para procurar um arquivo antes de instalar o pacote?

    
por Tom Purl 11.08.2012 / 05:42

3 respostas

8

Pode usar o parâmetro exec's creates :

exec { "carbon":
    command => "pip install carbon",
    require => Class["graphite::prereqs::install"],
    creates => "/opt/graphite/bin/carbon-cache.py",
    path    => ["/usr/bin", "/usr/sbin"],
    timeout => 100,
  }
    
por 11.08.2012 / 05:55
1

Eu não testei, mas tente isto:

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,
}
    
por 11.08.2012 / 06:02
1

Eu tentaria usar "ensure = > installed" em vez de "ensure = > latest".

A partir da referência do tipo de marionete :

What state the package should be in. On packaging systems that can retrieve new packages on their own, you can choose which package to retrieve by specifying a version number or latest as the ensure value. On packaging systems that manage configuration files separately from “normal” system files, you can uninstall config files by specifying purged as the ensure value. Valid values are present (also called installed), absent, purged, held, latest. Values can match /./.

Eu não sei como o provedor pip está escrito, mas aposto que se você usar installed em vez de latest , o fantoche detectará que o pacote já está instalado e não tentará instalá-lo novamente.

    
por 11.08.2012 / 10:39