Module: Chef::Knife::DigitalOceanBase
- Included in:
- DigitalOceanAccountInfo, DigitalOceanDomainCreate, DigitalOceanDomainDestroy, DigitalOceanDomainList, DigitalOceanDomainRecordCreate, DigitalOceanDomainRecordDestroy, DigitalOceanDomainRecordEdit, DigitalOceanDomainRecordList, DigitalOceanDropletCreate, DigitalOceanDropletDestroy, DigitalOceanDropletList, DigitalOceanDropletPower, DigitalOceanDropletPowercycle, DigitalOceanDropletReboot, DigitalOceanDropletRebuild, DigitalOceanDropletRename, DigitalOceanDropletResize, DigitalOceanDropletShutdown, DigitalOceanDropletSnapshot, DigitalOceanImageDestroy, DigitalOceanImageList, DigitalOceanImageTransfer, DigitalOceanRegionList, DigitalOceanSizeList, DigitalOceanSshkeyCreate, DigitalOceanSshkeyDestroy, DigitalOceanSshkeyList
- Defined in:
- lib/chef/knife/digital_ocean_base.rb
Class Method Summary collapse
Instance Method Summary collapse
- #client ⇒ Object
- #locate_config_value(key) ⇒ Object
- #validate!(keys = [:digital_ocean_access_token]) ⇒ Object
- #wait_for_status(result, status: 'in-progress', sleep: 3) ⇒ Object
Class Method Details
.included(includer) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 24 def self.included(includer) includer.class_eval do category 'digital_ocean' # 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::DigitalOceanBase # # deps do # require 'foo' # require 'bar' # Chef::Knife::DigitalOceanBase.load_deps # end # deps { Chef::Knife::DigitalOceanBase.load_deps } option :digital_ocean_access_token, short: '-A ACCESS_TOKEN', long: '--digital_ocean_access_token ACCESS_TOKEN', description: 'Your DigitalOcean ACCESS_TOKEN', proc: proc { |access_token| Chef::Config[:knife][:digital_ocean_access_token] = access_token } end end |
.load_deps ⇒ Object
18 19 20 21 22 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 18 def self.load_deps require 'droplet_kit' require 'json' require 'chef/mixin/shell_out' end |
Instance Method Details
#client ⇒ Object
50 51 52 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 50 def client DropletKit::Client.new(access_token: Chef::Config[:knife][:digital_ocean_access_token]) end |
#locate_config_value(key) ⇒ Object
67 68 69 70 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 67 def locate_config_value(key) key = key.to_sym config[key] || Chef::Config[:knife][key] end |
#validate!(keys = [:digital_ocean_access_token]) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 54 def validate!(keys = [:digital_ocean_access_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) ⇒ Object
72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/chef/knife/digital_ocean_base.rb', line 72 def wait_for_status(result, status: 'in-progress', sleep: 3) print 'Waiting ' while result.status == 'in-progress' sleep sleep print('.') if status == 'in-progress' break if client.droplets.find(id: locate_config_value(:id)).status != 'in-progress' else break if client.droplets.find(id: locate_config_value(:id)).status == status end end ui.info 'OK' end |