Re: [one-users] putting OS images in the image repository

2010-12-01 Thread Carlos Martín Sánchez
Hi Steven,

This is an interesting use-case. When we designed the image repository, we
had to make a compromise between expectable behaviour and advanced
customization usage. I guess this falls into the advanced usage, but
OpenNebula is flexible enough to take this challenge.


To automatically save all VM disks that use a certain Image, you can use
hooks.

I would add a new flag to all the relevant images in your system, either
having them in the image template, or adding them afterwards [1]:
oneimage addattr image_id AUTO_SAVE YES

This will add the flag to the template:

$ oneimage show 1
IMAGE  INFORMATION

[...]

IMAGE TEMPLATE

*AUTO_SAVE=YES*
DEV_PREFIX=hd
NAME=test_image
PATH=/home/cmartin/trabajo/scratch/steven/disk.img
TYPE=OS

To add a new hook to the system, edit $ONE_LOCATION/etc/oned.conf [2] and
add something similar to the following:

VM_HOOK = [
name  = auto_save,
on= CREATE,
command   = auto_save.rb,
arguments = $VMID ]

This will execute a new script, placed in
$ONE_LOCATION/share/hooks/auto_save.rb, every time a new VM is created.
I suggest you to use ruby, because the ruby OCA API [3] will make it easier.

This script will have to:
1) Get the complete information for VM vm_id from OpenNebula.
2) For each disk, check if it is using an Image.
2.1) Get that image's information, and look for the AUTO_SAVE=YES attribute.
If it's present, then issue a onevm saveas operation over that vm-id and
disk-id.

To be able to identify the disks later, you could include in the new image
name the  vm-id_disk-id string.


This way, files will be all managed by OpenNebula in the repository. If you
are doing this for back-up purposes, and you won't actually instantiate a VM
using this saved images, you can always move that files away from the
repository and then delete the images.


This is the easiest and elegant way I see to do this, but any
other opinions are welcome.

I'd also like to ask the community if more people feel this should be
supported out of the box by OpenNebula. If so, we could start a discussion
to determine the specific features or requirements this would imply.


Best regards,
Carlos.

[1] http://opennebula.org/doc/2.0/cli/oneimage.html
[2] http://opennebula.org/documentation:rel2.0:oned_conf#hook_system
[3] http://opennebula.org/documentation:rel2.0:ruby

Carlos Martín, Cloud Technology Engineer/Researcher
DSA Research Group: web http://dsa-research.org and blog
http://blog.dsa-research.org
OpenNebula Open Source Toolkit for Cloud Computing:
http://www.OpenNebula.org


On 30 November 2010 21:56, Steven Timm t...@fnal.gov wrote:


 In
 http://www.opennebula.org/documentation:rel2.0:img_guide

 it says

 When images are published they are always cloned, and persistent images
 are never cloned. Therefore, an image cannot be public and persistent at the
 same time. To manage a public image that won't be cloned, unpublish it first
 and make it persistent. 

 I have stored a 10GB OS image in the repository
 and made it public

 -bash-3.2$ oneimage show 8
 IMAGE  INFORMATION
 ID : 8
 NAME   : new-2.6.18-194.26.1.img
 TYPE   : OS
 REGISTER TIME  : 11/29 14:15:13
 PUBLIC : Yes
 PERSISTENT : No
 SOURCE :
 /var/lib/one/image-repo/920301ec2fcc29f9c621c3ebe2a8f5ac6b27fca6
 STATE  : used
 RUNNING_VMS: 2

 IMAGE TEMPLATE
 DEV_PREFIX=vd
 NAME=new-2.6.18-194.26.1.img
 -bash-3.2$


 I would like to have this available as a template image for
 many users to be able to use.
 I have successfully been able to have 2 users
 use it as part of a VM with the following syntax

 DISK   = [ image = new-2.6.18-194.26.1.img ]


 However, I find that this automatically implies a
 SAVE=NO once the VM is launched, with no way to override it.
 From output of onevm show:

 DISK=[
  CLONE=YES,
  DISK_ID=0,
  IMAGE=new-2.6.18-194.26.1.img,
  IMAGE_ID=8,
  READONLY=NO,
  SAVE=NO,
  SOURCE=/var/lib/one/image-repo/920301ec2fcc29f9c621c3ebe2a8f5ac6b27fca6,
  TARGET=vda,
  TYPE=DISK ]


 -

 So is there any way to do the following:

 1) have the VM registered in the repository for all to see
 2) be launched public and cloned on launch so it can be used
   in multiple VM's at once
 3) have the result be saved in an image-specific file when
   each VM is shut down, and not back to the repository?

 ***I know that if I execute the onevm saveas command I can
 get this done on a machine-by-machine basis but would
 prefer a way to make it automatic.
 -

 The second question is closely related, namely:
 Once a public image is declared in the database, is there any way
 to actually update the content of that image, such that for instance
 Name = latest kernel template image

 could be periodically updated with the latest kernel
 and all new VM's would pick it up?


 Thanks

 Steve Timm

 

[one-users] putting OS images in the image repository

2010-11-30 Thread Steven Timm


In
http://www.opennebula.org/documentation:rel2.0:img_guide

it says

When images are published they are always cloned, and persistent images 
are never cloned. Therefore, an image cannot be public and persistent at 
the same time. To manage a public image that won't be cloned, unpublish it 
first and make it persistent. 


I have stored a 10GB OS image in the repository
and made it public

-bash-3.2$ oneimage show 8
IMAGE  INFORMATION
ID : 8
NAME   : new-2.6.18-194.26.1.img
TYPE   : OS
REGISTER TIME  : 11/29 14:15:13
PUBLIC : Yes
PERSISTENT : No
SOURCE : 
/var/lib/one/image-repo/920301ec2fcc29f9c621c3ebe2a8f5ac6b27fca6

STATE  : used
RUNNING_VMS: 2

IMAGE TEMPLATE
DEV_PREFIX=vd
NAME=new-2.6.18-194.26.1.img
-bash-3.2$


I would like to have this available as a template image for
many users to be able to use.
I have successfully been able to have 2 users
use it as part of a VM with the following syntax

DISK   = [ image = new-2.6.18-194.26.1.img ]


However, I find that this automatically implies a
SAVE=NO once the VM is launched, with no way to override it.

From output of onevm show:


DISK=[
  CLONE=YES,
  DISK_ID=0,
  IMAGE=new-2.6.18-194.26.1.img,
  IMAGE_ID=8,
  READONLY=NO,
  SAVE=NO,
  SOURCE=/var/lib/one/image-repo/920301ec2fcc29f9c621c3ebe2a8f5ac6b27fca6,
  TARGET=vda,
  TYPE=DISK ]


-

So is there any way to do the following:

1) have the VM registered in the repository for all to see
2) be launched public and cloned on launch so it can be used
   in multiple VM's at once
3) have the result be saved in an image-specific file when
   each VM is shut down, and not back to the repository?

***I know that if I execute the onevm saveas command I can
get this done on a machine-by-machine basis but would
prefer a way to make it automatic.
-

The second question is closely related, namely:
Once a public image is declared in the database, is there any way
to actually update the content of that image, such that for instance
Name = latest kernel template image

could be periodically updated with the latest kernel
and all new VM's would pick it up?


Thanks

Steve Timm

--
Steven C. Timm, Ph.D  (630) 840-8525
t...@fnal.gov  http://home.fnal.gov/~timm/
Fermilab Computing Division, Scientific Computing Facilities,
Grid Facilities Department, FermiGrid Services Group, Assistant Group Leader.
___
Users mailing list
Users@lists.opennebula.org
http://lists.opennebula.org/listinfo.cgi/users-opennebula.org