Analisar / Editar arquivos conf do Apache com Ruby?

2

Eu preciso escrever alguns scripts para fazer alterações nos arquivos conf do Apache, a saber, adicionar / atualizar o VirtualHosts. Eu planejo fazer isso em Ruby. antes de eu escrever o meu, existem scripts / rubygems que permitem ao Ruby analisar / modificar arquivos conf do Apache, especificamente <VirtualHost> diretivas?

    
por Josh 12.03.2010 / 20:50

2 respostas

3

Acabei de escrever meu próprio script de rubi ... Não muito bem feito, mas no caso de alguém precisar, aqui está a essência dele. Ele está procurando o conteúdo da tag <VirtualHost></VirtualHost> para que possa criar um segundo <VirtualHost> com um ServerName , que é um subdomínio de nosso certificado SSL curinga ...

begin
  logMsg "Updating apache config file for user #{user} (#{domain_httpd_conf})"

  domain_httpd_conf_io = File.open(domain_httpd_conf,File::RDONLY)

  ip_addr = ''
  main_vhost_config = []
  ssl_vhost_config = ["  ServerName #{auto_ssl_domain}",'  Include "conf/wildcard-ssl.conf"']

  indent = 1

  while line = domain_httpd_conf_io.gets

    line_indented = '  '*indent+line.strip

    if line =~ /^[[:space:]]*<VirtualHost ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)(:[0-9]+)[^>]*>/
      ip = $1
    elsif line =~ /^[[:space:]]*<\/VirtualHost>/
      break 2
    elsif line =~ /^[[:space:]]*(ServerAlias|ServerName).*/
      main_vhost_config.push line_indented
    else

      if line =~ /^[[:space:]]*<[^\/]/
        indent += 1
      elsif line =~ /^[[:space:]]*<[\/]/
        indent = [1, indent-1].max
        line_indented = '  '*indent + line.strip
      end

      main_vhost_config.push line_indented
      ssl_vhost_config.push line_indented
    end
  end

  main_vhost_config.push "  Include #{extraconf_dir}/*.conf"

  domain_httpd_conf_io.close
  domain_httpd_conf_io = File.open(domain_httpd_conf,File::WRONLY||File::TRUNC)

  domain_httpd_conf_io.puts "<VirtualHost #{ip}:80 #{ip}:8080>"
  domain_httpd_conf_io.puts main_vhost_config
  domain_httpd_conf_io.puts "</VirtualHost>"

  domain_httpd_conf_io.puts

  domain_httpd_conf_io.puts "<VirtualHost #{ip}:443 #{ip}:8888>"
  domain_httpd_conf_io.puts ssl_vhost_config
  domain_httpd_conf_io.puts "</VirtualHost>"

rescue SystemCallError => err
  logErr "ERROR: Unexpected error: "+err

  domain_httpd_conf_io.close
end

Ainda tem alguns erros para resolver, mas na maioria das vezes faz o que eu quero.

    
por 19.03.2010 / 13:35
0

Não há nenhuma pista, mas uma coisa que pode ajudá-lo é o suporte do apache para hospedagem virtual em massa: link

Se você puder impor a consistência em seus vhosts, talvez não precise do ruby para criar / gerenciar / editá-los. Convenção sobre configuração é o caminho certo?

    
por 12.03.2010 / 21:18