tmatilai/vagrant-proxyconf

View on GitHub
lib/vagrant-proxyconf/action/configure_yum_proxy.rb

Summary

Maintainability
A
0 mins
Test Coverage
require_relative 'base'
require_relative '../resource'
require_relative '../userinfo_uri'

module VagrantPlugins
  module ProxyConf
    class Action
      # Action for configuring Yum on the guest
      class ConfigureYumProxy < Base
        def config_name
          'yum_proxy'
        end

        private

        def configure_machine
          return if !supported?

          tmp = "/tmp/vagrant-proxyconf"
          path = config_path

          @machine.communicate.tap do |comm|
            comm.sudo("rm -f #{tmp}", error_check: false)
            comm.upload(ProxyConf.resource("yum_config.awk"), tmp)
            comm.sudo("touch #{path}")
            comm.sudo("gawk -f #{tmp} #{proxy_params} #{path} > #{path}.new")
            comm.sudo("chmod 0644 #{path}.new")
            comm.sudo("chown root:root #{path}.new")
            comm.sudo("mv -f #{path}.new #{path}")
            comm.sudo("rm -f #{tmp}")
          end

          true
        end

        def unconfigure_machine
          return if !supported?

          @machine.communicate.tap do |comm|
            if comm.test("grep '^proxy' #{config_path}")
              comm.sudo("sed -i.bak -e '/^proxy/d' #{config_path}")
            end
          end

          true
        end

        def proxy_params
          u = UserinfoURI.new(config.http)
          "-v proxy=#{escape(u.uri)} -v user=#{escape(u.user)} -v pass=#{escape(u.pass)}"
        end
      end
    end
  end
end