Class: Lunanode::API
Overview
Class for accessing the Lunanode API.
The class is instantiated by either passing it a JSON file containing the keys `api_id` and `api_key`, or specifying the ID and key directly:
api = Lunanode::API.new("credentials_file.json")
api = Lunanode::API.new(api_id: "ABCDEFG", api_key: "HIJKLMNOP")
Once instantiated, action methods follow the example:
api.vm_list # no parameters
api.vm_info(vm_id: "My-VM-ID") # required parameters
api.image_list(region: "Toronto") # optional parameters
Required and optional arguments are specified in the method definitions, but can can be queried via API.params_for. They follow the API specification atwiki.lunanode.com/index.php/API
Constant Summary collapse
- API_ENDPOINT =
Class-level definitions
"https://dynamic.lunanode.com/api/".freeze
Instance Attribute Summary collapse
-
#api_id ⇒ Object
readonly
Returns the value of attribute api_id.
Class Method Summary collapse
-
.params_for(method_name) ⇒ Hash
Show parameter info for any API instance method.
Instance Method Summary collapse
-
#action(category, action, **params) ⇒ Hash, ...
Send an arbitrary API action without any parameter checks.
-
#initialize(*args, **options) ⇒ API
constructor
Instantiate an API object.
-
#inspect ⇒ Object
(also: #to_s)
Display a string representation of the object without key information.
Methods included from Lunanode::APIActions::Billing
Methods included from Lunanode::APIActions::SshKey
#sshkey_add, #sshkey_list, #sshkey_remove
Methods included from Lunanode::APIActions::DNS
#dns2_record_add, #dns2_record_list, #dns2_record_remove, #dns2_zone_add, #dns2_zone_list, #dns2_zone_remove, #dns_dyn_add, #dns_dyn_list, #dns_dyn_remove, #dns_dyn_update
Methods included from Lunanode::APIActions::Email
#email_alias_add, #email_alias_list, #email_alias_remove, #email_domain_add, #email_domain_dkim_set, #email_domain_dkim_unset, #email_domain_list, #email_domain_remove, #email_usage, #email_user_add, #email_user_list, #email_user_remove, #email_user_set_password
Methods included from Lunanode::APIActions::Floating
#floating_add, #floating_delete, #floating_list
Methods included from Lunanode::APIActions::Image
#image_delete, #image_details, #image_fetch, #image_list, #image_list_mine, #image_rename, #image_replicate, #image_retrieve
Methods included from Lunanode::APIActions::LB
#lb_associate, #lb_create, #lb_delete, #lb_info, #lb_list, #lb_member_add, #lb_member_remove
Methods included from Lunanode::APIActions::Monitor
#monitor_alert_add, #monitor_alert_list, #monitor_alert_remove, #monitor_check_add, #monitor_check_list, #monitor_check_remove, #monitor_check_types, #monitor_contact_add, #monitor_contact_list, #monitor_contact_remove
Methods included from Lunanode::APIActions::Network
#network_create, #network_delete, #network_list
Methods included from Lunanode::APIActions::Plan
Methods included from Lunanode::APIActions::Script
#script_create, #script_delete, #script_get, #script_list, #script_update
Methods included from Lunanode::APIActions::Securitygroup
#securitygroup_create, #securitygroup_delete, #securitygroup_list, #securitygroup_rename, #securitygroup_rule_delete, #securitygroup_rule_insert, #securitygroup_rule_list
Methods included from Lunanode::APIActions::VM
#vm_create, #vm_delete, #vm_diskswap, #vm_floatingip_add, #vm_floatingip_delete, #vm_info, #vm_ip_add, #vm_ip_delete, #vm_iplist, #vm_list, #vm_reboot, #vm_reimage, #vm_rename, #vm_rescue, #vm_resize, #vm_securitygroup_add, #vm_securitygroup_remove, #vm_shelve, #vm_snapshot, #vm_start, #vm_stop, #vm_unshelve, #vm_vnc
Methods included from Lunanode::APIActions::Volume
#volume_attach, #volume_create, #volume_delete, #volume_detach, #volume_extend, #volume_info, #volume_list, #volume_rename, #volume_snapshot_create, #volume_snapshot_delete, #volume_snapshot_list, #volume_snapshot_replicate
Constructor Details
#initialize(credentials_file) ⇒ API #initialize(api_id: , api_key: ) ⇒ API
Instantiate an API object
81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/lunanode/api.rb', line 81 def initialize(*args, **) credentials_file = args.compact.first.to_s if File.exist?(credentials_file) credentials_data = File.read(credentials_file) = JSON.parse(credentials_data, symbolize_names: true) end @api_id = .fetch(:api_id).to_s.dup.freeze @api_key = .fetch(:api_key).to_s.dup.freeze @rest_client = RestClient::Resource.new( API_ENDPOINT, verify_ssl: OpenSSL::SSL::VERIFY_PEER ) end |
Instance Attribute Details
#api_id ⇒ Object (readonly)
Returns the value of attribute api_id.
60 61 62 |
# File 'lib/lunanode/api.rb', line 60 def api_id @api_id end |
Class Method Details
.params_for(method_name) ⇒ Hash
Show parameter info for any Lunanode::API instance method.
The keys of the hash results denote the type of parameter:
-
:keyreq => Required keyword argument
-
:key => Optional keyword argument
-
:keyrest => Arbitrary additional keyword arguments
-
:req => Required positional argument
-
:opt => Optional positional argument
-
:rest => Arbitrary additional positional arguments
44 45 46 47 48 49 50 51 52 53 |
# File 'lib/lunanode/api.rb', line 44 def self.params_for(method_name) method_name = method_name.to_sym @params_for[method_name] ||= begin param_groups = instance_method(method_name).parameters.group_by(&:first) out = param_groups.map do |status, param_def| [status, param_def.map(&:last)] end out.to_h.each_value(&:freeze).freeze end end |
Instance Method Details
#action(category, action, **params) ⇒ Hash, ...
Send an arbitrary API action without any parameter checks.
110 111 112 113 114 115 116 117 118 119 |
# File 'lib/lunanode/api.rb', line 110 def action(category, action, **params) resp = call_api("#{category}/#{action}/", params) raise APIError, resp[:error] unless resp.delete(:success) == "yes" if resp.size == 1 resp.values.first else resp end end |
#inspect ⇒ Object Also known as: to_s
Display a string representation of the object without key information.
96 97 98 |
# File 'lib/lunanode/api.rb', line 96 def inspect "#<#{self.class.name}: api_id=#{api_id.inspect}>" end |