Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

Using puppet I want to update packages on my (CentOS 5 & 6 servers) in a controlled way. Therefore I don't want to use ensure=>latest but rather ensure=>3.0.1-1.

Example:

class puppet::installation inherits puppet {
        package { "puppet":
            ensure => "3.0.1-1",
        }
}

The update works alright but puppet agent keeps complaining that there is a difference:

/Stage[main]/Puppet::Installation/Package[puppet]/ensure: current_value 3.0.1-1.el6, should be 3.0.1-1 (noop)

I can solve this by changing the ensure rule to 3.0.1-1.el6 but than that won't work on CentOS 5.

Is there a short/clean way to solve this or do I have to write to seperate, os-releaseversion dependant rules.

I have been googling for a solution but didn't find anything pertaining to this particular question.

Any suggestion or reference to a relevant example would be appreciated.

share|improve this question
    
personally i use ensure => installed, and mirror the repos. That way you control what "latest" is, and when to update to it. –  Sirex Nov 24 '12 at 19:09

3 Answers 3

Actually, I was able to use the wildcard character to install a specific version of Python regardless of operating system. My package code for python is as follows.

package {
    "python-dev": ensure => "2.7.3*";
    "python-setuptools": ensure => installed;
    "python-pip": ensure => installed;
    "libxml2-dev": ensure => installed;
    "libxslt-dev": ensure => installed;
}

By using the 2.7.3* as the ensure version, it installed python 2.7.3-0ubuntu2.2 on my vagrant VM. I'm using Puppet version 2.7.19.

share|improve this answer

You would have to set a variable with a case statement, sort of like this:

class puppet::installation inherits puppet {

        case $::operatingsystemrelease {
            '5':     { $puppet_ver = '3.0.1-1'}
            default: { $puppet_ver = '3.0.1-1.el6'}
        }

        package { 'puppet':
            ensure => $puppet_ver,
        }
}

However, it's a better design to use a params.pp file for this sort of logic. Read about params.pp here: http://www.example42.com/?q=understandExample42PuppetModules

share|improve this answer

Puppet really doesn't have any functionality for this yet (though they really need it).

You can use the yum-versionlock yum plugin to lock specific RPM packages at specific versions, and then use puppet to control the versionlock configuration.

For some other workarounds, see this related question.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.