Puppet:在各个节点上停止服务

时间:2014-01-16 01:41:02

标签: service puppet

Puppet有时会非常令人沮丧。

我有多个使用服务“poodle”的节点,并且已经这样配置。

# 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'],
    }
}

现在,让我们说我不再需要在“甲壳虫”机器上运行贵宾犬了。如何仅在该机器上停止服务?

我试过通过ensure =>停了,但我收到语法错误:

node 'beetle.example.com' {
    include basicstuff
    class poodle::service {
         ensure => 'stopped'
    }
}

或者也许?

node 'beetle.example.com' {
    include basicstuff
    include poodle::service {
         ensure => 'stopped'
    }
}

1 个答案:

答案 0 :(得分:3)

向服务类添加一个参数,该参数可用于服务上的ensure参数,如此

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'],
    }
}

然后,不要像第二次尝试那样包括类,而是将类创建为资源并设置$ ensure的值。

node 'beetle.example.com' {
    include basicstuff
    class {'poodle::service':
         ensure => 'stopped',
    }
}

这应该会破坏服务。

由于$ ensure参数的默认设置已设置为运行,因此您无需在实际需要时指定它。

如果您愿意,可以参数化课程的其他部分,如果您愿意,可以将应用程序完全删除。

关于这个主题的好读物是:Learning Puppet — Class Parameters