问题
Puppet can be so frustrating sometimes.
I have multiple nodes that use a service "poodle", and it has been configured this way.
# SITE.PP
node 'tweedle.example.com' {
include basicstuff
include poodle
}
node 'beetle.example.com' {
include basicstuff
include poodle
}
## POODLE MODULE, manifests/init.pp
class poodle {
class {'poodle::install': }
class {'poodle::config': }
class {'poodle::service': }
Class ['poodle::install'] -> Class ['poodle::config'] ~> Class ['poodle::service']
}
...
class poodler::service {
service {'poodle':
ensure => 'running',
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}
Now, let's say that I no longer need to run poodle on the "beetle" machine. How do I go about stopping the service on only that machine?
I've tried passing ensure => stopped, but I get a syntax error:
node 'beetle.example.com' {
include basicstuff
class poodle::service {
ensure => 'stopped'
}
}
Or maybe?
node 'beetle.example.com' {
include basicstuff
include poodle::service {
ensure => 'stopped'
}
}
回答1:
Add a parameter to your service class that can be used for the ensure parameter on the service, like so
class poodler::service ($ensure = 'running') {
service {'poodle':
ensure => $ensure,
enable => true,
restart => "/etc/init.d/poodle stop && sleep 5 && /etc/init.d/poodle start",
subscribe => File['/opt/poodle/poodle.py'],
}
}
Then instead of including the class like your second attempt does, create the class as a resource and set the value of $ensure.
node 'beetle.example.com' {
include basicstuff
class {'poodle::service':
ensure => 'stopped',
}
}
That should kill the service.
Since the default for the $ensure paramater is set to running, you don't need to specify that when you actually want it running.
Can parameterize other parts of your classes if you want that could cause the app to be completely removed if you wanted to.
Good reading on this subject is at: Learning Puppet — Class Parameters
来源:https://stackoverflow.com/questions/21151902/puppet-stopping-service-on-individual-nodes