X-Git-Url: https://pwan.org/git/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fcopy_my_conf.rb;h=8f2b889cced63e21d6546789dde5368e44279392;hb=08b150e7415fcdaca5277bee264dda740369063f;hp=27d4bbf110cfdfc63bcad2986d9c93cb78792fa4;hpb=4e619b1dcbbb066996ce907e94835b308c012d43;p=vagrant-dotfiles.git diff --git a/lib/copy_my_conf.rb b/lib/copy_my_conf.rb index 27d4bbf..8f2b889 100644 --- a/lib/copy_my_conf.rb +++ b/lib/copy_my_conf.rb @@ -1,73 +1,41 @@ -class CopyMyConf < Vagrant::Provisioners::Base - - def prepare - prepare_vim if config.vim - prepare_git if config.git - prepare_ssh if config.ssh - end - - def provision! - channel = env[:vm].channel - provision_ssh(channel) if config.ssh - provision_vim(channel) if config.vim - provision_git(channel) if config.git - end - - def self.config_class - Config - end - - class Config < Vagrant::Config::Base - attr_accessor :ssh - attr_accessor :vim - attr_accessor :git - attr_accessor :user_home - end - -private - - def tmp_root - "/tmp/copy_my_conf" - end - - def prepare_ssh - env[:vm].config.vm.share_folder("ssh", "#{tmp_root}/ssh", "~/.ssh") - end - - def prepare_git - `mkdir -p #{tmp_root}/git` - `cp ~/.gitconfig #{tmp_root}/git/` - env[:vm].config.vm.share_folder("git", "#{tmp_root}/git/", "#{tmp_root}/git") - end - - def prepare_vim - `mkdir -p #{tmp_root}/vim` - ["~/.vimrc", "~/.vim"].each do |file| - `cp -r #{file} #{tmp_root}/vim` +require 'boot' +module Vagrant + module Provisioners + class CopyMyConf < Base + def initialize *args + `rm -rf /tmp/copy_my_conf` + super *args + end + + def prepare + @to_be_copied = [] + config.all_true.each do |c| + conf = self.class.const_get(c.capitalize).new + @to_be_copied << conf + conf.prepare env[:vm].config.vm, tmp_root + end + end + + def provision! + channel = env[:vm].channel + @to_be_copied.each do |conf| + conf.provision channel, user_home, tmp_root + end + end + + def self.config_class + Config + end + + private + + def tmp_root + "/tmp/copy_my_conf" + end + + def user_home + config.user_home || "/home/vagrant" + end end - env[:vm].config.vm.share_folder("vim", "#{tmp_root}/vim/", "#{tmp_root}/vim") - end - - def provision_git(channel) - puts "Copying your gitconfig" - channel.execute("cp #{tmp_root}/git/.gitconfig ~/") - end - - def provision_vim(channel) - puts "Copying your vim configuratios" - channel.execute("rm -rf #{user_home}/.vim*") - channel.execute("cp -r #{tmp_root}/vim/.??* ~/") - end - - def provision_ssh(channel) - puts "Copying your ssh keys and config" - channel.sudo("mkdir -p #{tmp_root}/cached && chown -R vagrant #{tmp_root}/cached") - channel.execute("[[ -f #{user_home}/.ssh/authorized_keys ]] && mv #{user_home}/.ssh/authorized_keys #{tmp_root}/cached") - channel.execute("cp #{tmp_root}/ssh/* #{user_home}/.ssh") - channel.execute("cat #{tmp_root}/cached/authorized_keys >> #{user_home}/.ssh/authorized_keys") # So that `vagrant ssh` doesn't ask for password - end - - def user_home - config.user_home || "/home/vagrant" end end