module Chef::Knife::ScalewayBase

Public Class Methods

included(includer) click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 24
def self.included(includer)
  includer.class_eval do
    category 'scaleway'

    # Lazy load our dependencies. Later calls to `Knife#deps` override
    # previous ones, so if the including class calls it, it needs to also
    # call our #load_deps, i.e:
    #
    #   Include Chef::Knife::ScalewayBase
    #
    #   deps do
    #     require 'foo'
    #     require 'bar'
    #     Chef::Knife::ScalewayBase.load_deps
    #   end
    #
    deps { Chef::Knife::ScalewayBase.load_deps }

    option :scaleway_access_token,
           short: '-A ACCESS_TOKEN',
           long: '--scaleway_access_token ACCESS_TOKEN',
           description: 'Your Scaleway ACCESS_TOKEN',
           proc: proc { |access_token| Chef::Config[:knife][:scaleway_access_token] = access_token }
  end
end
load_deps() click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 18
def self.load_deps
  require_relative 'scaleway'
  require 'json'
  require 'chef/mixin/shell_out'
end

Public Instance Methods

client() click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 50
def client
  Scaleway::Client.new(Chef::Config[:knife][:scaleway_access_key], Chef::Config[:knife][:scaleway_token])
end
locate_config_value(key) click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 67
def locate_config_value(key)
  key = key.to_sym
  config[key] || Chef::Config[:knife][key]
end
validate!(keys = [:scaleway_access_key, :scaleway_token]) click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 54
def validate!(keys = [:scaleway_access_key, :scaleway_token])
  errors = []

  keys.each do |k|
    if locate_config_value(k).nil?
      errors << "You did not provide a valid '#{k}' value. " \
                "Please set knife[:#{k}] in your knife.rb or pass as an option."
    end
  end

  exit 1 if errors.each { |e| ui.error(e) }.any?
end
wait_for_status(result, status: 'in-progress', sleep: 3) click to toggle source
# File lib/chef/knife/scaleway_base.rb, line 72
def wait_for_status(result, status: 'in-progress', sleep: 3)
  print "Waiting for state #{status}"
  result = Scaleway::Server.find(locate_config_value(:id))
  while result.state != status
    sleep sleep
    print('.')

    #if status == 'starting' || status == 'stopping'
      #break if client.servers.find(id: locate_config_value(:id)).status != 'in-progress'
    #else
      break if Scaleway::Server.find(locate_config_value(:id)).state == status
    #end
  end
  ui.info 'OK'
end