Robert Munteanu
Robert Munteanu

Reputation: 68268

Running a command once after a group of packages is installed

I have an existing puppet manifest which installs a bunch of php5 packages and only after being installed restarts apache. The simplified manifest is something like

package { 'apache-php':
    name => $modules,
    ensure => installed
}

exec {'enable-mod-php':
    command     => $enable_cmd,
    refreshonly => true
}

Package['apache-php'] ~> Exec['enable-mod-php'] ~> Service['apache']

After a system upgrade catalog runs have started failing with the following error message:

Error: Failed to apply catalog: Parameter name failed on Package[apache-php]: Name must be a String not Array at /etc/puppet/modules/apache/manifests/php.pp:22

I found out that I was using an undocumented feature/bug: Puppet 3.4.0 name as an array in package.

However, I'm having a hard time finding out how to redo my setup after the upgrade. How can I rewrite this manifest so that it works with more recent puppet versions?

Upvotes: 1

Views: 2663

Answers (1)

ptierno
ptierno

Reputation: 10074

Instead of using an arbitrary title for the package define in your example. (eg. apache-php) and using a name parameter, you can do the following:

$modules = ['foo','bar','baz']

package { $modules:
  ensure => present
  notify => Exec['enable-mod-php']
}

exec {'enable-mod-php':
  command     => $enable_cmd,
  refreshonly => true,
  notify      => Service['apache']
}

service { 'apache':
  # your apache params
}

I haven't looked at the code for the package provider, but can verify that the above works. You should also note that chaining arrows are all well and good, but according to the Puppet style guide, metaparameters are preferred.

Hope this helps.

Upvotes: 6

Related Questions