O tipo de serviço ( 3.x , 2.x ) não possui um parâmetro onlyif, que faz parte do tipo exec ( 3.x , 2.x .
Para fazer o que você quer fazer, existem duas maneiras. A primeira maneira é a maneira normal e preferida de fazer coisas. A segunda maneira é um hack que funcionará também, de preferência o chkconfig do serviço deve ser um executável separado, mas não há nenhum problema em chkconfiging um serviço, mesmo que ele já esteja configurado dessa maneira.
Opção 1. Escreva um fato para ver se o serviço está instalado e coloque um condicional ao redor do tipo de serviço:
# service_scx_installed.rb Facter.add('service_scx_installed') do setcode do File.exists?('/opt/microsoft/scx') end end # scom.pp class scom { if $service_scx_installed { service { 'scx-cimd': ensure => running, enable => true, hasstatus => true, hasrestart => true, } } }
Opção 2. Coloque toda a lógica em um grande executável:
exec {'start and chkconfig on scx service': command => 'chkconfig scx service on; service scx restart', onlyif => ['test -f /opt/microsoft/scx', '! service scx status'], provider => 'shell', }