2013-01-30 5 views
5

Ho un manifest di marionette che afferma che il servizio "vernice" deve essere in esecuzione, ma non lo è.Puppet non avvia un servizio (vernice) quando viene eseguita la marionetta

Ho un altro servizio definito, apache2, che funziona bene, e iniziare ogni volta che eseguo puppet apply.

[email protected]:~$ sudo netstat -tunelp 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address   State  User  Inode  PID/Program name 
tcp  0  0 0.0.0.0:22    0.0.0.0:*    LISTEN  0   3749  605/sshd   
tcp  0  0 127.0.0.1:6010   0.0.0.0:*    LISTEN  1000  5169  1110/0   
tcp  0  0 0.0.0.0:48828   0.0.0.0:*    LISTEN  0   3445  552/rpc.statd 
tcp  0  0 0.0.0.0:111    0.0.0.0:*    LISTEN  0   3228  484/portmap  
tcp6  0  0 :::22     :::*     LISTEN  0   3751  605/sshd   
tcp6  0  0 ::1:6010    :::*     LISTEN  1000  5168  1110/0   
udp  0  0 0.0.0.0:68    0.0.0.0:*       0   4179  917/dhclient  
udp  0  0 0.0.0.0:68    0.0.0.0:*       0   3277  558/dhclient3 
udp  0  0 0.0.0.0:728    0.0.0.0:*       0   3430  552/rpc.statd 
udp  0  0 0.0.0.0:111    0.0.0.0:*       0   3227  484/portmap  
udp  0  0 0.0.0.0:54265   0.0.0.0:*       0   3442  552/rpc.statd 
udp  0  0 10.0.2.15:123   0.0.0.0:*       102  4259  904/ntpd   
udp  0  0 127.0.0.1:123   0.0.0.0:*       0   4208  904/ntpd   
udp  0  0 0.0.0.0:123    0.0.0.0:*       0   4203  904/ntpd   
udp6  0  0 fe80::a00:27ff:feb5:123 :::*        0   4210  904/ntpd   
udp6  0  0 ::1:123     :::*        0   4209  904/ntpd   
udp6  0  0 :::123     :::*        0   4204  904/ntpd   
[email protected]:~$ 

Applicare burattino:

[email protected]:~$ sudo puppet apply --verbose /vagrant/manifests/default.pp 
info: Applying configuration version '1359558916' 
notice: /Stage[main]/Apachevarnish/Service[apache2]/ensure: ensure changed 'stopped' to 'running' 
notice: Finished catalog run in 0.15 seconds 

Ma vernice non si avvia.

Questo è il file manifesto:

class apachevarnish { 


    Package { ensure => "installed" } 

    package { "apache2": } 
    package { "varnish": } 

    file { '/etc/hosts': 
    ensure => link, 
    target => "/vagrant/hosts", 
    force => true 
    } 

    file { '/var/www': 
    ensure => link, 
    target => "/vagrant", 
    notify => Service['apache2'], 
    force => true 
    } 

    file { '/etc/varnish': 
    ensure => link, 
    target => "/vagrant/etc/varnish", 
    # notify => Service['varnish'], 
    force => true 
    } 


    service { "varnish": 
    ensure => running, 
    require => Package["varnish"], 
    } 


    service { "apache2": 
    ensure => running, 
    require => Package["apache2"], 
    } 

} 

Grazie!

risposta

13

Rispondendo alla mia domanda:

Secondo questa: https://projects.puppetlabs.com/issues/12773 il problema risiede negli script di Ubuntu init, o il comando "servizio" non ha restituito un codice di uscita corretta.

La soluzione è impostare un controllo dello stato personalizzato utilizzando grep e service.

service { "varnish": 
    ensure => running, 
    enable => true, 
    hasrestart => true, 
    hasstatus => true, 
    status => '/usr/sbin/service varnish status | grep "is running"', 
    require => Package["varnish"], 
    } 
4

I documenti dicono che si aspetta che il fantoccio initscript del servizio per avere un comando "status" che restituisce 0 se il servizio è in esecuzione e un valore diverso da zero in caso contrario. Questo è il comportamento predefinito di puppet. Provate a fare un

$> sudo service <service_name> status 
$> echo $? //Make sure you are getting the correct return values that puppet expects. 

Nel caso la vostra initscript non ti dà tipi restituiti desiderati set "hasstatus => false" all'interno del blocco direttiva sui servizi e fare un tentativo.

1

Questo funziona bene:

service { $service: 
    ensure  => running, 
    enable  => true, 
    status  => "/usr/sbin/service ${service} status", 
    require => Package["$service"], 
    }