2013-05-27 13:26:47 -04:00
|
|
|
# Description
|
|
|
|
The openvz provider implements a simple mapping between openvz commands and fog
|
|
|
|
|
|
|
|
# Usage
|
|
|
|
## Establish a connection
|
|
|
|
openvz = ::Fog::Compute.new( {:provider => 'openvz'})
|
|
|
|
|
|
|
|
Additional option is **:openvz_connect_command**:
|
|
|
|
It allows you to specify connect command to connect to the openvz server, if it's not localhost.
|
|
|
|
|
|
|
|
- This is specified as a string where the '@command@' placeholder will be replaced when the commands are executed
|
|
|
|
- The @command@ will contain double quotes, therefore make sure you use single quotes only inside the placeholder
|
|
|
|
|
|
|
|
To connect to a remote ssh server myopenvzserver and sudo excute the command
|
|
|
|
|
|
|
|
openvz = ::Fog::Compute.new( {
|
|
|
|
:provider => 'openvz',
|
|
|
|
:openvz_connect_command => "ssh myopenvzserver 'sudo @command'"
|
|
|
|
})
|
|
|
|
|
|
|
|
## List servers
|
|
|
|
|
|
|
|
openvz = ::Fog::Compute.new( {:provider => 'openvz'})
|
|
|
|
servers = openvz.servers.all
|
|
|
|
servers.each do |s|
|
|
|
|
puts c.ctid
|
|
|
|
end
|
|
|
|
|
|
|
|
## Server Unique id
|
|
|
|
Servers have the ctid as identity.
|
|
|
|
|
|
|
|
## Get a specific server
|
|
|
|
|
|
|
|
openvz = ::Fog::Compute.new( {:provider => 'openvz'})
|
|
|
|
server = openvz.servers.get(104)
|
|
|
|
|
|
|
|
## Server lifecycle
|
|
|
|
|
|
|
|
openvz = ::Fog::Compute.new( {:provider => 'openvz'})
|
|
|
|
# Create a server
|
|
|
|
server = openvz.servers.create(
|
|
|
|
:ctid => '104',
|
|
|
|
:ostemplate => 'ubuntu-12.04-x86_64',
|
|
|
|
:diskspace => 1024*1024 #in kbyte
|
|
|
|
)
|
|
|
|
server.reload
|
|
|
|
|
|
|
|
# Start a server
|
|
|
|
unless server.status == 'running'
|
|
|
|
server.start
|
|
|
|
end
|
|
|
|
|
|
|
|
server.set({
|
|
|
|
:nameserver => '8.8.8.8',
|
|
|
|
:ipadd => '192.168.8.10',
|
|
|
|
:ram => '380M',
|
|
|
|
:hostname => 'wonderfullserver',
|
|
|
|
:name => 'chef',
|
|
|
|
:description => 'wonderfullserver',
|
|
|
|
:save => true
|
|
|
|
})
|
|
|
|
|
|
|
|
# Reboot a server
|
|
|
|
server.reboot
|
|
|
|
sleep 3
|
|
|
|
|
|
|
|
# Get the ipaddress
|
|
|
|
puts "ipaddress: #{server.public_ip_address}"
|
|
|
|
|
|
|
|
server.wait_for { status == 'running' }
|
|
|
|
|
|
|
|
# Stop the server
|
|
|
|
server.stop
|
|
|
|
|
|
|
|
# Destroy the server
|
|
|
|
server.destroy
|
|
|
|
|
|
|
|
## Models
|
|
|
|
Both compute::server and computer::servers (collections) have been implemented
|
|
|
|
|
|
|
|
Note:
|
|
|
|
- server.save can only be called upon creation, use the server.set command to change the settings
|
|
|
|
- server.public_ip_address will only return the first ip address
|
|
|
|
- TODO: snapshots could be implemented as a collection
|
|
|
|
- server.state has the standard openvz states.
|
|
|
|
- server.ready? assumes server.status == 'running'
|
|
|
|
|
|
|
|
## Requests
|
|
|
|
### Passing parameters
|
|
|
|
The server request are in essence a passthrough to __vzctl__.
|
2014-02-19 07:30:59 -05:00
|
|
|
Just provide the options as a hash in key,value pairs.
|
2013-05-27 13:26:47 -04:00
|
|
|
If it's just a switch (like --save), use a key and a boolean(true).
|
|
|
|
|
|
|
|
The following command in plain cli-vzctl:
|
|
|
|
|
|
|
|
vzctl set 104 --nameserver 8.8.8.8 --ipadd 192.168.8.10 --ram '380M'
|
|
|
|
|
|
|
|
Would be in fog-speak:
|
|
|
|
|
|
|
|
server = openvz.servers.get(104)
|
|
|
|
server.set({
|
|
|
|
:nameserver => '8.8.8.8',
|
|
|
|
:ipadd => '192.168.8.10',
|
|
|
|
:ram => '380M',
|
|
|
|
:save => true
|
|
|
|
})
|
|
|
|
|
|
|
|
To specify multiple values for the same option pass an array
|
|
|
|
|
|
|
|
server.set({
|
|
|
|
:nameserver => ['8.8.8.8','7.7.7.7'],
|
|
|
|
:ipadd => ['192.168.8.10','192.168.4.10'],
|
|
|
|
:ram => '380M',
|
|
|
|
:save => true
|
|
|
|
})
|
|
|
|
|
|
|
|
### Passing arguments
|
|
|
|
both exec, exec2 and runscript take no parameters just arguments
|
|
|
|
|
|
|
|
server = openvz.servers.get(104)
|
|
|
|
uname_output = server.exec("uname -a")
|
|
|
|
|
|
|
|
### Not implemented
|
|
|
|
From all the options to vzctl (see below) the following commands have **NOT** been implemented:
|
|
|
|
|
|
|
|
- console : as it requires direct input
|
|
|
|
|
|
|
|
## VZCTL commands
|
|
|
|
|
|
|
|
the current version of the fog openvz driver is based on the following vzctl syntax
|
|
|
|
|
|
|
|
vzctl version 4.3
|
|
|
|
Copyright (C) 2000-2012, Parallels, Inc.
|
|
|
|
This program may be distributed under the terms of the GNU GPL License.
|
|
|
|
|
|
|
|
Usage: vzctl [options] <command> <ctid> [parameters]
|
|
|
|
|
|
|
|
vzctl create <ctid> [--ostemplate <name>] [--config <name>]
|
|
|
|
[--layout ploop|simfs] [--hostname <name>] [--name <name>] [--ipadd <addr>]
|
|
|
|
[--diskspace <kbytes>] [--private <path>] [--root <path>]
|
|
|
|
[--local_uid <UID>] [--local_gid <GID>]
|
|
|
|
vzctl start <ctid> [--force] [--wait]
|
|
|
|
vzctl destroy | mount | umount | stop | restart | status <ctid>
|
|
|
|
vzctl convert <ctid> [--layout ploop[:mode]] [--diskspace <kbytes>]
|
|
|
|
vzctl compact <ctid>
|
|
|
|
vzctl snapshot <ctid> [--id <uuid>] [--name <name>] [--description <desc>]
|
|
|
|
[--skip-suspend]
|
|
|
|
vzctl snapshot-switch | snapshot-delete <ctid> --id <uuid>
|
|
|
|
vzctl snapshot-mount <ctid> --id <uuid> --target <dir>
|
|
|
|
vzctl snapshot-umount <ctid> --id <uuid>
|
|
|
|
vzctl snapshot-list <ctid> [-H] [-o field[,field...]] [--id <uuid>]
|
|
|
|
vzctl quotaon | quotaoff | quotainit <ctid>
|
|
|
|
vzctl console <ctid> [ttyno]
|
|
|
|
vzctl enter <ctid> [--exec <command> [arg ...]]
|
|
|
|
vzctl exec | exec2 <ctid> <command> [arg ...]
|
|
|
|
vzctl runscript <ctid> <script>
|
|
|
|
vzctl suspend | resume <ctid> [--dumpfile <name>]
|
|
|
|
vzctl set <ctid> [--save] [--force] [--setmode restart|ignore]
|
|
|
|
[--ram <bytes>[KMG]] [--swap <bytes>[KMG]]
|
|
|
|
[--ipadd <addr>] [--ipdel <addr>|all] [--hostname <name>]
|
|
|
|
[--nameserver <addr>] [--searchdomain <name>]
|
|
|
|
[--onboot yes|no] [--bootorder <N>]
|
|
|
|
[--userpasswd <user>:<passwd>]
|
|
|
|
[--cpuunits <N>] [--cpulimit <N>] [--cpus <N>] [--cpumask <cpus>]
|
|
|
|
[--diskspace <soft>[:<hard>]] [--diskinodes <soft>[:<hard>]]
|
|
|
|
[--quotatime <N>] [--quotaugidlimit <N>] [--mount_opts <opt>[,<opt>...]]
|
|
|
|
[--capability <name>:on|off ...]
|
|
|
|
[--devices b|c:major:minor|all:r|w|rw]
|
|
|
|
[--devnodes device:r|w|rw|none]
|
|
|
|
[--netif_add <ifname[,mac,host_ifname,host_mac,bridge]]>]
|
|
|
|
[--netif_del <ifname>]
|
|
|
|
[--applyconfig <name>] [--applyconfig_map <name>]
|
|
|
|
[--features <name:on|off>] [--name <vename>] [--ioprio <N>]
|
|
|
|
[--pci_add [<domain>:]<bus>:<slot>.<func>] [--pci_del <d:b:s.f>]
|
|
|
|
[--iptables <name>] [--disabled <yes|no>]
|
|
|
|
[UBC parameters]
|
|
|
|
|
|
|
|
UBC parameters (N - items, P - pages, B - bytes):
|
|
|
|
Two numbers divided by colon means barrier:limit.
|
|
|
|
In case the limit is not given it is set to the same value as the barrier.
|
|
|
|
--numproc N[:N] --numtcpsock N[:N] --numothersock N[:N]
|
|
|
|
--vmguarpages P[:P] --kmemsize B[:B] --tcpsndbuf B[:B]
|
|
|
|
--tcprcvbuf B[:B] --othersockbuf B[:B] --dgramrcvbuf B[:B]
|
|
|
|
--oomguarpages P[:P] --lockedpages P[:P] --privvmpages P[:P]
|
|
|
|
--shmpages P[:P] --numfile N[:N] --numflock N[:N]
|
|
|
|
--numpty N[:N] --numsiginfo N[:N] --dcachesize N[:N]
|
|
|
|
--numiptent N[:N] --physpages P[:P] --avnumproc N[:N]
|
|
|
|
--swappages P[:P]
|