File config.pihole.rb of Package pi-hole

#!/usr/bin/ruby

require "fileutils"

sysconfig_file = "/etc/sysconfig/pihole"
dnsmasq_file = "/etc/dnsmasq.d/01-pihole.conf"
setupvars_file = "/etc/pihole/setupVars.conf"
lines = File.readlines sysconfig_file

regex = /^(?<variable>\w+)=(?<value>[\w\:\.\d\s]+)$/

pihole_interface = nil
pihole_ipv4 = nil
pihole_ipv6 = nil
pihole_dns_1 = nil
pihole_dns_2 = nil
lines.each do |line|
    line.strip!
    next if line[0] == "#"

    match = line.match regex
    next if match.nil?

    case match[:variable]
    when "PIHOLE_INTERFACE"
        pihole_interface = match[:value]
    when "PIHOLE_IPV4"
        pihole_ipv4 = match[:value]
    when "PIHOLE_IPV6"
        pihole_ipv6 = match[:value]
    when "PIHOLE_DNS_1"
        pihole_dns_1 = match[:value]
    when "PIHOLE_DNS_2"
        pihole_dns_2 = match[:value]
    else
        puts "Unrecognized variable #{match[:variable]}"
        exit 1
    end
end

content = File.read(dnsmasq_file)
content.gsub!(/^interface=.*$/, "interface=#{pihole_interface}")
content.gsub!(/^server=.*\nserver=.*$/, "server=#{pihole_dns_1}\nserver=#{pihole_dns_2}")

File.open("#{dnsmasq_file}.temp", "w") do |file|
    file.puts content
end

FileUtils.mv "#{dnsmasq_file}.temp", dnsmasq_file

content = File.read(setupvars_file)
content.gsub!(/^PIHOLE_INTERFACE=.*$/, "PIHOLE_INTERFACE=#{pihole_interface}")
content.gsub!(/^IPV4_ADDRESS=.*$/, "IPV4_ADDRESS=#{pihole_ipv4}")
content.gsub!(/^IPV6_ADDRESS=.*$/, "IPV6_ADDRESS=#{pihole_ipv6}")
content.gsub!(/^PIHOLE_DNS_1=.*$/, "PIHOLE_DNS_1=#{pihole_dns_1}")
content.gsub!(/^PIHOLE_DNS_2=.*$/, "PIHOLE_DNS_2=#{pihole_dns_2}")

File.open("#{setupvars_file}.temp", "w") do |file|
    file.puts content
end

FileUtils.mv "#{setupvars_file}.temp", setupvars_file

`systemctl reload pihole-ftl`