class Kontena::Machine::Packet::NodeProvisioner
Attributes
api_client[R]
client[R]
Public Class Methods
new(api_client, token)
click to toggle source
@param [Kontena::Client] api_client
Kontena
api client @param [String] token Digital Ocean token
# File lib/kontena/machine/packet/node_provisioner.rb, line 13 def initialize(api_client, token) @api_client = api_client @client = login(token) end
Public Instance Methods
device_exists_in_grid?(grid, device)
click to toggle source
# File lib/kontena/machine/packet/node_provisioner.rb, line 65 def device_exists_in_grid?(grid, device) api_client.get("grids/#{grid}/nodes")['nodes'].find{|n| n['name'] == device.hostname} end
generate_name()
click to toggle source
# File lib/kontena/machine/packet/node_provisioner.rb, line 61 def generate_name "#{super}-#{rand(1..99)}" end
run!(opts)
click to toggle source
# File lib/kontena/machine/packet/node_provisioner.rb, line 18 def run!(opts) abort('Project does not exist in Packet') unless project = find_project(opts[:project]) abort('Facility does not exist in Packet') unless facility = find_facility(opts[:facility]) abort('Operating system coreos_stable does not exist in Packet') unless os = find_os('coreos_stable') abort('Device type does not exist in Packet') unless plan = find_plan(opts[:plan]) check_or_create_ssh_key(opts[:ssh_key]) if opts[:ssh_key] userdata_vars = { version: opts[:version], master_uri: opts[:master_uri], grid_token: opts[:grid_token], } device = project.new_device( hostname: generate_name, facility: facility.to_hash, operating_system: os.to_hash, plan: plan.to_hash, billing_cycle: opts[:billing], locked: false, userdata: user_data(userdata_vars, 'cloudinit.yml') ) spinner "Creating Packet device #{device.hostname.colorize(:cyan)} " do api_retry "Packet API reported an error, please try again" do response = client.create_device(device) raise response.body unless response.success? end until device && [:active, :provisioning, :powering_on].include?(device.state) device = find_device(project.id, device.hostname) rescue nil sleep 1 end end node = nil spinner "Waiting for node #{device.hostname.colorize(:cyan)} join to grid #{opts[:grid].colorize(:cyan)} (estimate 4 minutes) " do sleep 0.5 until node = device_exists_in_grid?(opts[:grid], device) end set_labels(node, ["region=#{opts[:facility]}", "provider=packet"]) end
set_labels(node, labels)
click to toggle source
# File lib/kontena/machine/packet/node_provisioner.rb, line 69 def set_labels(node, labels) data = {labels: labels} api_client.put("nodes/#{node['id']}", data, {}, {'Kontena-Grid-Token' => node['grid']['token']}) end