module Catfish class CLI::Provision attr_reader :options def initialize(options) @options = options end def run p 'Provisioning to servers using Catfishfile.lock' vagrant_version begin # Connect to the servers. The --provider=managed is the key here. system("vagrant up --provider=#{options[:provider]}") # Confirm the connectivity status = `vagrant status --machine-readable` if status.include? 'not reachable' abort 'ERROR DEPLOYING: One or more servers could not be connected to' end provision status ensure # Disconnect from all of the servers system 'vagrant destroy -f' end end private def vagrant_version vagrant_version = 'Vagrant 1.6' fail "#{vagrant_version} or greater is a prerequisite" unless `vagrant --version`.include? vagrant_version end def provision(status) if options[:parallel] machines = status.split("\n").collect do |line| line.split(',')[1] end threads = [] machines.uniq!.each do |machine| threads << Thread.new do system "vagrant provision #{machine}" end end threads.each(&:join) else system 'vagrant provision' end end end end