class Kontena::Machine::Vagrant::MasterProvisioner
Constants
- API_URL
Attributes
client[R]
Public Class Methods
new()
click to toggle source
# File lib/kontena/machine/vagrant/master_provisioner.rb, line 16 def initialize @client = Excon.new(API_URL) end
Public Instance Methods
generate_name()
click to toggle source
# File lib/kontena/machine/vagrant/master_provisioner.rb, line 90 def generate_name "krates-master-#{super}-#{rand(1..99)}" end
master_running?()
click to toggle source
# File lib/kontena/machine/vagrant/master_provisioner.rb, line 84 def master_running? client.get(path: '/').status == 200 rescue false end
run!(opts)
click to toggle source
# File lib/kontena/machine/vagrant/master_provisioner.rb, line 20 def run!(opts) name = opts[:name] || generate_name version = opts[:version] memory = opts[:memory] || 1024 vault_secret = opts[:vault_secret] vault_iv = opts[:vault_iv] initial_admin_code = opts[:initial_admin_code] coreos_channel = opts[:coreos_channel] vagrant_path = "#{Dir.home}/.krates/vagrant_master/" if Dir.exist?(vagrant_path) puts "Oops... cannot create Krates Master because installation path already exists." puts "If you are sure that no Krates Master(s) exist on this machine, remove folder: #{vagrant_path}" abort end FileUtils.mkdir_p(vagrant_path) template = File.join(__dir__ , '/Vagrantfile.master.rb.erb') cloudinit_template = File.join(__dir__ , '/cloudinit.yml') vars = { name: name, server_name: name.sub('krates-master-', ''), version: version, memory: memory, vault_secret: vault_secret, initial_admin_code: initial_admin_code, vault_iv: vault_iv, coreos_channel: coreos_channel, cloudinit: "#{vagrant_path}/cloudinit.yml" } spinner "Creating Vagrant config " do vagrant_data = erb(File.read(template), vars) cloudinit = erb(File.read(cloudinit_template), vars) File.write("#{vagrant_path}/Vagrantfile", vagrant_data) File.write("#{vagrant_path}/cloudinit.yml", cloudinit) end Dir.chdir(vagrant_path) do spinner "Triggering CoreOS Container Linux box update" system('vagrant box update') spinner "Executing 'vagrant up'" run_command('vagrant up') spinner "'vagrant up' executed successfully" end spinner "Waiting for #{name.colorize(:cyan)} to start " do sleep 1 until master_running? end master_version = nil spinner "Retrieving #{name.colorize(:cyan)} version" do master_version = JSON.parse(client.get(path: '/'))["version"] rescue nil end spinner "Krates Master #{master_version} is now running at #{API_URL}" { name: name.sub('krates-master-', ''), public_ip: API_URL.split('//').last, provider: 'vagrant', version: master_version, code: opts[:initial_admin_code] } end