<div dir="ltr">Hi,<div><br></div><div class="gmail_extra"><div class="gmail_quote">On Wed, May 29, 2013 at 6:01 AM, Jon <span dir="ltr"><<a href="mailto:three18ti@gmail.com" target="_blank">three18ti@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Hello Carlos,<div><br></div><div>You definitely read my mind.  :)  My next question is going to be about how to use a "golden image", I'm thinking this will become a two step process.  However, there are some migration implications that I'm not sure I understand yet, which I think may make the "golden image" hook a bit more complicated than the "finalize" or "prepare golden" hook.</div>


<div><br></div><div>First I'd like to look at preparing the VM image for use as a golden image, or use as a base, non-persistent image.  Since the vm can be specified and cloned without any modification of the vm drivers (I'm currently doing this for my vms, copying 500MBs vs 2Gbs saves a ton of time on my "economy" server).  According to the docs, there are hooks for create and delete of images, is there a hook for cloning an image?  </div>

</blockquote><div><br></div><div style>No, hooks are triggered only when a resource changes state. Instead of a hook, you need to edit the clone driver script.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div>Is it possible to only execute hooks under certain conditions?  I like your Idea of adding a custom attribute "PREPARE_IMAGE = Yes" to the image, then when you clone it, it performs all of the sys-prep and compressing steps as it's cloning the image.  Also, I didn't see a way to test for attributes in the hooks documentation, is it possible to do so?  </div>


<div><br></div><div>I'm thinking along the lines of:</div><div><br></div><div>IMAGE_HOOK = [</div><div>   name        =  "prep_image",</div><div>   on             = "CLONE if $IMAGE['PREPARE_IMAGE'] = YES"</div>


<div>   command  = "/var/lib/one/myhooks/prep_image"</div><div>   arguments = "$BASE_IMAGE $NEW_IMAGE_ID"</div><div>]</div><div><br></div></blockquote><div><br></div><div style>You can't set conditions in oned.conf, but it is easy to check for that condition inside the hook.</div>

<div style>Hooks are executed as oneadmin, so you can query opennebula using the ruby oca, or the cli. Or you can also use the $TEMPLATE attribute, and use xpath to look for values. For example, [1] uses the xpath.rb script [2] and onevm show -x.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div></div><div>If the hook executes, does it stop other scripts from executing?  I Imagine the clone driver has a copy function, wold that also execute if my hook executed?</div>


<div><br></div></blockquote><div><br></div><div style>Just edit the clone script to make sure it is doing exactly what you expect.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div></div><div>Finally, Is there a reason the page you linked [1] says: "<strong style="font-size:13px;color:rgb(53,55,53);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;line-height:18px">Development version of OpenNebula 4.2</strong><span style="font-size:13px;color:rgb(85,85,85);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;line-height:18px;background-color:rgb(235,238,239)">. The material on this page needs to be reviewed for completeness and accuracy." in the heading?  </span></div>


<div><span style="font-size:13px;color:rgb(85,85,85);font-family:Arial,Verdana,Geneva,Helvetica,sans-serif;line-height:18px;background-color:rgb(235,238,239)">will these hooks work in 4.0?</span></div><div><br></div></blockquote>

<div><br></div><div style>Oops, looks like we copied the 4.2 hook guide to the 4.0 workspace, thanks!</div><div><br></div><div style>Regards,</div><div style>Carlos</div><div><div><br class="">[1] <a href="http://dev.opennebula.org/projects/opennebula/repository/revisions/one-4.0/entry/src/tm_mad/ceph/mvds">http://dev.opennebula.org/projects/opennebula/repository/revisions/one-4.0/entry/src/tm_mad/ceph/mvds</a><br>

</div><div>[2] <a href="http://dev.opennebula.org/projects/opennebula/repository/revisions/one-4.0/entry/src/datastore_mad/remotes/xpath.rb">http://dev.opennebula.org/projects/opennebula/repository/revisions/one-4.0/entry/src/datastore_mad/remotes/xpath.rb</a><br>

</div></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div></div><div>
Thanks,</div><div>Jon A</div><div><br></div></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div></div><div>[1] <a href="http://opennebula.org/documentation:rel4.0:hooks" target="_blank">http://opennebula.org/documentation:rel4.0:hooks</a></div><div class=""><div class="h5"><div><br><div class="gmail_quote">On Tue, May 28, 2013 at 7:07 AM, Carlos Martín Sánchez <span dir="ltr"><<a href="mailto:cmartin@opennebula.org" target="_blank">cmartin@opennebula.org</a>></span> wrote:<br>


<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div dir="ltr">Hi,<div><br></div><div>I just want to give you some general advice here: use hooks and drivers as much as possible.</div>


<div><br></div><div>For example, instead of adding a new xml-rpc call, oca method, CLI and sunstone, you could simply add a new attribute to the Image or VM template. MAKE_GOLDEN = YES or similar.</div>

<div>Doing this, you can forget about the user interface.</div><div><br></div><div>Then you can look for that attribute when the VM is shutdown.</div><div>This could be done editing the 'mvds' TM script [1], the one executed for the epilog phase. Or implement a hook [2] to be triggered after a VM is shut down.</div>




<div><br></div><div><br></div><div>Good luck, and keep us posted with your progress!</div><div><br></div><div><br></div><div>[1] <a href="http://opennebula.org/documentation:rel4.0:sd" target="_blank">http://opennebula.org/documentation:rel4.0:sd</a><br>




</div><div>[2] <a href="http://opennebula.org/documentation:rel4.0:hooks" target="_blank">http://opennebula.org/documentation:rel4.0:hooks</a><br></div></div><div class="gmail_extra"><br clear="all"><div><div dir="ltr">--<br>


Join us at <a href="http://opennebulaconf.com" target="_blank">OpenNebulaConf2013</a> in Berlin, 24-26 September, 2013<br>

--<div>Carlos Martín, MSc<br>Project Engineer<br>OpenNebula - The Open-source Solution for Data Center Virtualization<div><span style="border-collapse:collapse;color:rgb(136,136,136);font-family:arial,sans-serif;font-size:13px"><a href="http://www.OpenNebula.org" target="_blank">www.OpenNebula.org</a> | <a href="mailto:cmartin@opennebula.org" target="_blank">cmartin@opennebula.org</a> | <a href="http://twitter.com/opennebula" target="_blank">@OpenNebula</a></span><span style="border-collapse:collapse;color:rgb(136,136,136);font-family:arial,sans-serif;font-size:13px"><a href="mailto:cmartin@opennebula.org" style="color:rgb(42,93,176)" target="_blank"></a></span></div>




</div></div></div>
<br><br><div class="gmail_quote"><div><div>On Thu, May 23, 2013 at 7:13 AM, Jon <span dir="ltr"><<a href="mailto:three18ti@gmail.com" target="_blank">three18ti@gmail.com</a>></span> wrote:<br></div></div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><div>

Hello All,<div><br></div><div>Before I was using Open Nebula, my general virtual machine workflow was as follows:</div><div><br></div><div>1)  Install OS to qcow image, this creates an image between 500-1500MB </div><div>




2)  "Unconfigure" virtual machine, e.g. remove any system specific config: udev rules, user accounts, ssh host keys, SELinux relabel etc.</div>
<div>3)  Zero out the file system by creating a large file of all zeros, e.g.: dd if=/dev/zero of=./delme; rm delme</div><div>4)  Compress and (qemu-img reclaims unused space while compressing so the "sparsify" is implied) the image, to create a "master" image (I've heard this referred to as a "golden" image) </div>





<div>           this typically results in an image between 300-500MB, e.g. qemu-img convert -c -f qcow2 master.qcow2 -O qcow2 master.compressed.qcow2</div><div>5)  Create a "slave" copy on write image off the master, e.g.:  qemu-img create -b ../master/master.compressed.qcow2 -f qcow2 ./virtualmachine.qcow2</div>





<div>          This results in all of the changes being written to ./virtualmachine.qcow2</div><div><br></div><div>Fortunately, virt-sysprep and virt-sparsify handle steps 2 and 3 and the sparcify part of step 4 more or less mindlessly.</div>





<div>qemu-img is still required (as far as I know) to compress the image, but there is no longer a need to be in the vm to zero out the image, </div><div>so this whole process can be automated through a management layer like OpenNebula.</div>





<div><br></div><div>I would like to automate this work flow through OpenNebula.  I think it would be extremely useful to be able to prepare and "finalize" a virtual machine from OpenNebula.</div><div>Finalizing an image in this manner allows for maximization of disk space as well as use as a "master" or "golden" image.</div>





<div>In my mind, I think it makes sense to use the least amount of space for the common filesystem pieces.</div><div><br></div><div>Basically, when I create a new image in OpenNebula, I create a template with the iso and a blank persistent datablock, then instantiate the vm, install the iso, </div>





<div>shutdown the vm, and flip the image to a nonpersistent OS.</div><div><br></div><div>What I am proposing is a feature that would add an additional step that would allow a user to "finalize" the vm by "virt-sysprep"ing, "virt-sparsify"ing, </div>





<div>and compressing the image, to maximize space usage.  </div><div><br></div><div>-- My goal is to have a cli command, e.g.: `onevm finalize 38` or `onevm finilize ubuntu-server-13.04` as well as an option in Sunstone to finalize the image.</div>





<div>It would effectively finalize and clone the vm so, if necessary, the original can still be modified and finalized again.</div><div><br></div><div>Does any one have any other ideas, thoughts, comments, or suggestions for an image "finalization" function?  Is there anything I'm not thinking about that I should be?</div>





<div><br></div><div>As far as development of the feature is concerned, where would I create this feature for a commandline function, can you point me at some useful documentation for developing this kind of feature?</div>





<div>I'm not ready to tackle the sunstone piece of this yet I don't think, so I think my focus will be on the command line function for now.</div><div><br></div><div>Thanks for your input,</div><div>Jon A</div>
<br></div></div>_______________________________________________<br>
Users mailing list<br>
<a href="mailto:Users@lists.opennebula.org" target="_blank">Users@lists.opennebula.org</a><br>
<a href="http://lists.opennebula.org/listinfo.cgi/users-opennebula.org" target="_blank">http://lists.opennebula.org/listinfo.cgi/users-opennebula.org</a><br>
<br></blockquote></div><br></div>
</blockquote></div><br></div>
</div></div></blockquote></div><div><div dir="ltr"><br class="">--<br>Join us at <a href="http://opennebulaconf.com/" target="_blank">OpenNebulaConf2013</a> in Berlin, 24-26 September, 2013<br>--<div>Carlos Martín, MSc<br>

Project Engineer<br>OpenNebula - The Open-source Solution for Data Center Virtualization<div><span style="border-collapse:collapse;color:rgb(136,136,136);font-family:arial,sans-serif;font-size:13px"><a href="http://www.opennebula.org/" target="_blank">www.OpenNebula.org</a> | <a href="mailto:cmartin@opennebula.org" target="_blank">cmartin@opennebula.org</a> | <a href="http://twitter.com/opennebula" target="_blank">@OpenNebula</a></span><span style="border-collapse:collapse;color:rgb(136,136,136);font-family:arial,sans-serif;font-size:13px"><a href="mailto:cmartin@opennebula.org" target="_blank" style="color:rgb(42,93,176)"></a></span></div>

</div><div><br></div></div></div></div></div>