Puppet servindo plugins sobre nginx gera 404s

1

Eu migrei minha configuração do mestre de marionetes para ser executada com menos do que os arquivos sendo fornecidos pelo nginx.

Os arquivos do módulo são exibidos de forma excelente, mas os arquivos do plug-in não parecem funcionar. Os logs acham que os agentes estão solicitando URLs como /production/file_content/plugins/puppet/provider/exec/powershell.rb e nginx, portanto, está lançando um 404 porque nenhum caminho desse tipo existe. Isso funciona bem na WEBrick.

Em teoria, este deve ser um caso simples de escrever uma regra de reescrita semelhante à regra de módulos abaixo. No entanto, muitos desses provedores estão dentro dos módulos, portanto, esse provedor específico está em /etc/puppet/modules/powershell/lib/puppet/provider/exec/powershell.rb .

Como faço o mapeamento do URL de solicitação para o plug-in real, quando eles podem estar espalhados em vários diretórios de módulos?

Minha configuração do nginx tem esta aparência:

upstream puppetmaster-thin {                                                                                                                                                          
    server  unix:/var/run/puppet/puppetmasterd.0.sock;                                                                                                                                
    server  unix:/var/run/puppet/puppetmasterd.1.sock;                                                                                                                                
    server  unix:/var/run/puppet/puppetmasterd.2.sock;                                                                                                                                
}                                                                                                                                                                                     

server {                                                                                                                                                                              
    listen  8140;                                                                                                                                                                     
    root    /etc/puppet/rack;                                                                                                                                                         

    ssl                     on;                                                                                                                                                       
    ssl_session_timeout     5m;                                                                                                                                                       
    ssl_certificate         /var/lib/puppet/ssl/certs/gcspuppet01.pem;                                                                                                                
    ssl_certificate_key     /var/lib/puppet/ssl/private_keys/gcspuppet01.pem;                                                                                                         
    ssl_client_certificate  /var/lib/puppet/ssl/ca/ca_crt.pem;                                                                                                                        
    ssl_crl                 /var/lib/puppet/ssl/ca/ca_crl.pem;                                                                                                                        
    ssl_verify_client       optional;                                                                                                                                                 
    ssl_ciphers             SSLv2:-LOW:-EXPORT:RC4+RSA;                                                                                                                               

    proxy_read_timeout  120;                                                                                                                                                          
    proxy_redirect      off;                                                                                                                                                          

    proxy_set_header   Host             $host;                                                                                                                                        
    proxy_set_header   X-Real-IP        $remote_addr;                                                                                                                                 
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;                                                                                                                   
    proxy_set_header   X-Client-Verify  $ssl_client_verify;                                                                                                                           
    proxy_set_header   X-Client_DN      $ssl_client_s_dn;                                                                                                                             
    proxy_set_header   X-SSL-Subject    $ssl_client_s_dn;                                                                                                                             
    proxy_set_header   X-SSL-Issuer     $ssl_client_i_dn;                                                                                                                             


    location /production/file_content/ {                                                                                                                                              
    location /production/file_content/extra_files/ {                                                                                                                              
        alias /etc/puppet/files/;                                                                                                                                                 
    }                                                                                                                                                                             
    rewrite ^/production/file_content/modules/([^/]+)/(.*) /$1/files/$2;                                                                                                          
    break;                                                                                                                                                                        
    root /etc/puppet/modules/;                                                                                                                                                    
    }                                                                                                                                                                                 
    location / {                                                                                                                                                                      
    proxy_pass          http://puppetmaster-thin;                                                                                                                                 
    }                                                                                                                                                                                 
}         
    
por growse 08.03.2013 / 15:10

1 resposta

1

Eu percebi isso. A questão estava no fato de que o nginx estava efetivamente tentando servir uma solicitação estática para /production/file_content/ . O problema é que, embora isso seja útil para servir arquivos de módulos em /production/file_content/modules/ , ele intercepta /production/file_content/plugins .

Como os caminhos dos plug-ins são 'mágicos', eles precisam ser manipulados pelo daemon mestre de marionetes, e não pelo nginx. A solução é escrever um arquivo de configuração nginx melhor:

location /production/file_content/extra_files/ {                                                                                                                                  
    alias /etc/puppet/files/;                                                                                                                                                     
}                                                                                                                                                                                 
location /production/file_content/modules/ {                                                                                                                                      
    rewrite ^/production/file_content/modules/([^/]+)/(.*) /$1/files/$2;                                                                                                          
    break;                                                                                                                                                                        
    root /etc/puppet/modules/;                                                                                                                                                    
}           
    
por 08.03.2013 / 16:08