User Tools

Site Tools


manuals:vps:api

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
manuals:vps:api [2016/12/11 14:44] – created tomsmanuals:vps:api [2019/05/17 14:03] Aither
Line 1: Line 1:
 ====== API ====== ====== API ======
  
-Our API is running at https://api.vpsfree.cz. The API can be used to perform most +Our API is running at https://api.vpsfree.cz. The API can be used to perform 
-actions, just like you can do from the web interface. The only things that the API currently doesn’t include +any action that you can do in the web interface. In fact, the web interface 
-are the management of user profiles (address, email, etc.) and data transfers. +running at https://vpsadmin.vpsfree.cz uses the API and calls it for every 
- +action.
-In reality, the web interface running at https://vpsadmin.vpsfree.cz uses +
-the API and calls it for every action.+
  
 ===== API Documentation ===== ===== API Documentation =====
 The API documentation, i.e. a list of objects, possible actions as well as input and output The API documentation, i.e. a list of objects, possible actions as well as input and output
-parameters can be found at https://api.vpsfree.cz/v3.0/.+parameters can be found at https://api.vpsfree.cz/v5.0/.
  
 Even without logging in, you can see a list of all objects, i.e. even those that only Even without logging in, you can see a list of all objects, i.e. even those that only
Line 25: Line 23:
  
   * Ruby - https://github.com/vpsfreecz/vpsfree-client   * Ruby - https://github.com/vpsfreecz/vpsfree-client
-  * PHP - https://github.com/vpsfreecz/haveapi-client-php +  * PHP - https://github.com/vpsfreecz/haveapi/tree/master/clients/php 
-  * JavaScript - https://github.com/vpsfreecz/haveapi-client-js+  * JavaScript - https://github.com/vpsfreecz/haveapi/tree/master/clients/js 
 +  * Go - https://github.com/vpsfreecz/haveapi/tree/master/clients/go
   * The HaveAPI web interface - https://github.com/vpsfreecz/haveapi-webui   * The HaveAPI web interface - https://github.com/vpsfreecz/haveapi-webui
   * A file system based on FUSE - https://github.com/vpsfreecz/haveapi-fs   * A file system based on FUSE - https://github.com/vpsfreecz/haveapi-fs
Line 44: Line 43:
 automatically, storing the password on the disk or copying it constantly is not a good idea. automatically, storing the password on the disk or copying it constantly is not a good idea.
  
-Another method is authentication using tokens. The way this method works is that the client first +Another method is authentication using tokens. The way this method works is that 
-requests a token to be created, one for which the client needs the name and password. As soon as the client receives +the client first requests a token to be created, one for which the client needs 
-the token, the name and password can be forgotten since it is the token that is then used for further authentication.+the namepassword and possibly TOTP. As soon as the client receives the token, 
 +the name and password can be forgotten since it is the token that is then used 
 +for further authentication.
  
 There can be several types of tokens with different lifetimes: There can be several types of tokens with different lifetimes:
Line 55: Line 56:
   * permament - the token is valid permanently, or until it is deleted   * permament - the token is valid permanently, or until it is deleted
  
-The type of token and time period by which its validity is extended is chosen by the client.+The type of token and time period by which its validity is extended is chosen 
 +by the client.
  
 ===== CLI ===== ===== CLI =====
Line 165: Line 167:
  
 Commands: Commands:
-vps remote_console VPS_ID            Open VPS remote console+action_state wait <STATE ID>         Block until the action is finished  
 +vps remote_console VPS_ID            Open VPS remote console                        
 +vps migrate_many VPS_ID...           Migrate multiple VPSes using a migration plan                                                                                                           
 +snapshot download [SNAPSHOT_ID]      Download a snapshot as an archive or a stream 
 +snapshot send SNAPSHOT_ID            Download a snapshot stream and write it on stdout 
 +backup dataset [DATASET_ID] FILESYSTEM Backup dataset locally 
 +backup vps [VPS_ID] FILESYSTEM       Backup VPS locally 
 +ip_traffic top                       Live IP traffic monitor
  
 Available resources: Available resources:
-auth_token 
 cluster cluster
 cluster_resource cluster_resource
 +cluster_resource_package
 +cluster_resource_package.item
 dataset dataset
 dataset.snapshot dataset.snapshot
 dataset.plan dataset.plan
 +dataset.property_history
 dataset_plan dataset_plan
 dns_resolver dns_resolver
Line 179: Line 190:
 environment.config_chain environment.config_chain
 environment.dataset_plan environment.dataset_plan
 +host_ip_address
 integrity_check integrity_check
 integrity_fact integrity_fact
 integrity_object integrity_object
 ip_address ip_address
 +ip_traffic
 +ip_traffic_monitor
 +language
 location location
 mail_log mail_log
Line 188: Line 203:
 mail_template mail_template
 mail_template.recipient mail_template.recipient
 +mail_template.translation
 +migration_plan
 +migration_plan.vps_migration
 +network
 +network_interface
 node node
 +node.status
 +object_history
 os_template os_template
 pool pool
 +session_token
 snapshot_download snapshot_download
 +system_config
 +transaction
 transaction_chain transaction_chain
-transaction_chain.transaction 
 user user
 user.environment_config user.environment_config
 user.cluster_resource user.cluster_resource
 +user.public_key
 +user.mail_role_recipient
 +user.mail_template_recipient
 user.state_log user.state_log
 +user_cluster_resource_package
 +user_cluster_resource_package.item
 +user_namespace
 +user_namespace_map
 +user_namespace_map.entry
 user_session user_session
 vps vps
Line 203: Line 235:
 vps.config vps.config
 vps.feature vps.feature
-vps.ip_address 
 vps.mount vps.mount
 +vps.outage_window
 vps.console_token vps.console_token
 +vps.status
 vps_config vps_config
 +monitored_event
 +monitored_event.log
 +outage
 +outage.entity
 +outage.handler
 +outage_update
 +user_outage
 +vps_outage
 +vps_outage_mount
 +help_box
 +news_log
 +incoming_payment
 +payment_stats
 +user_account
 +user_payment
 +user_request
 +user_request.registration
 +user_request.change
 +action_state
 </code> </code>
  
Line 234: Line 286:
     -a, --auth METHOD                Authentication method     -a, --auth METHOD                Authentication method
     -s, --save                       Save credentials to config file for later     -s, --save                       Save credentials to config file for later
-        --username USER              User name+        --user USER                  User name
         --password PASSWORD          Password         --password PASSWORD          Password
         --token TOKEN                Token         --token TOKEN                Token
Line 536: Line 588:
 <note> <note>
 Although these examples are still valid, the CLI client already contains Although these examples are still valid, the CLI client already contains
-[[navody:vps:datasety#stahovani_zaloh|commands]] which make downloading backups+[[manuals:vps:datasets#downloading_backups|commands]] which make downloading backups
 even easier. even easier.
 </note> </note>
Line 546: Line 598:
 require 'vpsfree/client' require 'vpsfree/client'
  
-api = VpsFree::Client::Client.new+api = VpsFree::Client.new
 api.authenticate(:token, token: 'PUT YOUR TOKEN HERE') api.authenticate(:token, token: 'PUT YOUR TOKEN HERE')
- 
-downloads = [] 
  
 api.dataset.list(role: :hypervisor).each do |ds| api.dataset.list(role: :hypervisor).each do |ds|
   last_snapshot = ds.snapshot.list.last   last_snapshot = ds.snapshot.list.last
  
 +  # This action may take up to several hours
   dl = api.snapshot_download.create(snapshot: last_snapshot.id)   dl = api.snapshot_download.create(snapshot: last_snapshot.id)
-  +
   unless dl.api_response.ok?   unless dl.api_response.ok?
     warn "#{ds.name}@#{last_snapshot.created_at}: #{dl.api_response.message}"     warn "#{ds.name}@#{last_snapshot.created_at}: #{dl.api_response.message}"
     next     next
   end   end
 +  
 +  # The file is ready for download
 +  puts "Downloading #{id} to #{dl.file_name} (#{dl.size / 1024} GB)"
 +  `wget #{dl.url}`
  
-  downloads << dl.id +  # Finally, delete the file from the server 
-end +  dl.delete
- +
-vpsAdmin is now creating a tar.gz with the backup and it will take a while until it can be +
-# downloaded. There are regular checks for the “ready” parameter for all archives. +
-puts "Waiting for the downloads to be ready..." +
-loop do +
-  sleep(5*60) +
- +
-  downloads.delete_if do |id| +
-    dl = api.snapshot_download.find(id) +
-   +
-    unless dl.api_response.ok? +
-      warn "Download #{id} has failed" +
-      next(true)  # remove from the list +
-    end +
-   +
-    if dl.ready +
-      puts "Downloading #{id} to #{dl.file_name} (#{dl.size / 1024} GB)" +
-      `wget "#{dl.url}"+
-      dl.delete +
-      true +
-   +
-    else +
-      false +
-    end +
-  end +
-   +
-  break if downloads.empty?+
 end end
  
Line 601: Line 629:
 require 'vpsfree/client' require 'vpsfree/client'
  
-api = VpsFree::Client::Client.new+api = VpsFree::Client.new
 api.authenticate(:token, token: 'PUT YOUR TOKEN HERE') api.authenticate(:token, token: 'PUT YOUR TOKEN HERE')
  
Line 607: Line 635:
   # Creating a new snapshot   # Creating a new snapshot
   ds.snapshot.create   ds.snapshot.create
- 
-  # Naive waiting until the snapshot is created. A different option would be checking 
-  # the state of the corresponding transaction chain. 
-  sleep(10) 
  
   # Deleting older snapshots   # Deleting older snapshots
Line 626: Line 650:
       snap.delete       snap.delete
       deleted += 1       deleted += 1
- 
-      # Once again, naive waiting until the action finishes. 
-      sleep(30) 
     end     end
   end   end
manuals/vps/api.txt · Last modified: 2024/01/02 21:05 by aither