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.