Назад | Перейти на главную страницу

Разбирать / редактировать файлы конфигурации Apache с помощью Ruby?

Мне нужно написать несколько скриптов для внесения изменений в файлы конфигурации Apache, а именно для добавления / обновления VirtualHosts. Я планирую сделать это на Ruby. прежде чем я напишу свой собственный, есть ли какие-либо скрипты / rubygems, которые позволяют Ruby анализировать / изменять файлы конфигурации Apache, в частности <VirtualHost> директивы?

Я закончил тем, что просто написал свой собственный скрипт Ruby ... Не очень хорошо, но на случай, если кому-то это понадобится, вот его суть. Он ищет содержимое <VirtualHost></VirtualHost> тег, чтобы он мог создать второй <VirtualHost> с ServerName который является поддоменом нашего сертификата SSL с подстановочными знаками ...

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

По-прежнему есть некоторые ошибки, но в основном он делает то, что я хочу.

Понятия не имею, но одна вещь, которая может вам помочь, - это поддержка apache для массового виртуального хостинга: http://httpd.apache.org/docs/2.2/vhosts/mass.html

Если вы можете обеспечить согласованность между своими vhosts, возможно, вам не понадобится Ruby для их создания / управления / редактирования. Соглашение важнее конфигурации - это правильно?