1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/lib/fog/xenserver/examples/getting_started.md
2014-02-19 12:30:59 +00:00

4.3 KiB

Getting started: the compute service

Connecting, retrieving and managing server objects

First, create a connection to the XenServer host:

require 'fog'
require 'pp'

#
# http://rubydoc.info/github/fog/fog/Fog/Compute/XenServer/Real
#
conn = Fog::Compute.new({
  :provider => 'XenServer',
  :xenserver_url => 'xenserver-test',
  :xenserver_username => 'root',
  :xenserver_password => 'changeme',
  :xenserver_defaults => {
    :template => "squeeze-test"
  }
})

Listing servers (VMs) and templates

We try to follow fog naming conventions and behavior as much as we can, so the terminology used in fog/xenserver is a little bit different from the one used in XAPI/XenServer documents. In particular:

  • A Fog::Compute::XenServer::Server is a XenServer VM or DomU

  • A Fog::Compute::XenServer::Host is a Hypervisor or Dom0

Having that in mind, we can start doing things with out XenServer host.

Listing all the servers (VMs):

conn.servers.all

This will return a list of Fog::Compute::XenServer::Server.

List all the servers whose name matches Ubuntu:

conn.servers.all :name_matches => "Ubuntu"

Listing the first server running (templates aren't included by default in the list):

server = conn.servers.first

Listing custom templates, that is, the ones created by the user:

custom = conn.servers.custom_templates

Listing built-in templates (the templates available after a fresh install):

built_in = conn.servers.builtin_templates

Templates are regular Fog::Compute::XenServer::Server objects too, so you can inspect some of their attributes. The relevant XAPI documentation:

http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VM

Fog::Compute::XenServer::Server attributes and operations usually map to the ones found in the official Citrix documentation, and they are available at:

http://rubydoc.info/github/fog/fog/Fog/Compute/XenServer/Server

and

https://github.com/fog/fog/blob/master/lib/fog/xenserver/models/compute/server.rb

Server operations and attributes

Getting server VIFs (virtual network interfaces):

# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VIF
server.networks
# or server.vifs

Listing the server VBDs (virtual block devices):

# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VBD
server.vbds

Get VDIs objects (virtual disk images) attached to the server:

server.vbds.each do |vbd|
  # http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VDI
  vdi = vbd.vdi
  # In bytes
  puts vdi.virtual_size
  puts vdi.physical_utilisation
end

Server creation and life-cycle management

Creating a new server/VM:

server = conn.servers.create :name => 'foobar',
                             :template_name => 'squeeze-test'

The server is automatically started after that.

Note that template_name is optional if you have specified the ':template' parameter when when creating the connection.

If you don't want to automatically start the server, use 'new' instead of 'create':

server = conn.servers.new :name => 'foobar',
                          :template_name => 'squeeze-test'

and set auto_start to false when saving it:

server.save :auto_start => false

Shutting down the server, By forcing it

server.stop 'hard'
# server.hard_shutdown is equivalent

Doing a clean shutdown

server.stop 'clean'
# server.clean_shutdown is equivalent

And finally, destroy it (it will force a shutdown first if running):

server.destroy

XenServer Host (Dom0) operations

The are some operations that can be performed on the host, without retrieving and/or manipulating servers:

Listing all the VBDs (virtual block devices):

# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=VBD
conn.vbds.all

This will retrieve the list of every single VBD available in the XenServer.

Same thing applies to the virtual disk images:

conn.vdis.all

Listing Storage Repositories (Xen SRs), where the disk images are stored:

# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=SR
conn.storage_repositories

XenServer Pools:

# http://docs.vmd.citrix.com/XenServer/6.0.0/1.0/en_gb/api/?c=pool
conn.pools

Retrieve the default storage repository in a pool:

conn.pools.first.default_storage_repository
# or the equivalent conn.pools.first.default_sr