<div dir="ltr"><div class="gmail_extra">Hi,<br></div><div class="gmail_extra"><div><br></div><div><div class="gmail_extra"><div class="gmail_quote">On Tue, Nov 26, 2013 at 4:02 PM, Olivier Sallou <span dir="ltr"><<a href="mailto:olivier.sallou@irisa.fr" target="_blank">olivier.sallou@irisa.fr</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 bgcolor="#FFFFFF" text="#000000"><div><br>
<div>On 11/26/2013 03:04 PM, Simon Boulet wrote:</div></div><div><blockquote type="cite"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><div>Perhaps that's the real problem here... I'm not very familiar with context.sh script. Is the entire VM template available (including the USER_TEMPLATE) or only the CONTEXT section?</div>
</div></div></div></blockquote><br></div>user_template is not set by itelf in the vm context file, only the context. But in my context, I add variables that refer to USER_TEMPLATE (but it is right that there are not set in first place, only after hooks). So it seems that we can refer to USER_TEMPLATE var, but only if there are predefined, not added in a hook (template not regenerated/calculated).<br>
<br>the best would be to have user_template vars added to the context.sh file in addition to the one in the vm template, AFTER the hooks.<br></div></blockquote></div></div></div></div><div class="gmail_extra"><br></div><div class="gmail_extra">
True, you can get the whole VM (XML format encoded in base64) with the pre-defined context attribute $TEMPLATE [1]. But that will be done the moment the VM is created, before the on create hooks can update the template.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">
We should change the behaviour and parse the context when the VM is deployed, or at least the $TEMPLATE variable... A more generic approach could be to add a synchronized hook before the VM is created, to allow to edit it before it is parsed by oned.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Meanwhile, I think you have to options:</div><div class="gmail_extra">- Edit the VMs before they are sent to OpenNebula, in the ruby API [2][3]</div><div class="gmail_extra">
- Edit the script that creates the cdrom iso [4] and insert your variables, or the onevm show -x output. It will be located in /var/lib/one/remotes/tm/shared/context</div><div class="gmail_extra"><br></div><div class="gmail_extra">
Regards</div><div class="gmail_extra"><br></div><div class="gmail_extra">
<div><div dir="ltr">[1] <a href="http://opennebula.org/documentation:rel4.2:cong" target="_blank">http://opennebula.org/documentation:rel4.2:cong</a><br></div><div dir="ltr">[2] <a href="http://opennebula.org/doc/4.2/oca/ruby/OpenNebula/Template.html#instantiate-instance_method" target="_blank">http://opennebula.org/doc/4.2/oca/ruby/OpenNebula/Template.html#instantiate-instance_method</a><br>
</div><div dir="ltr">[3] <a href="http://opennebula.org/doc/4.2/oca/ruby/OpenNebula/VirtualMachine.html#allocate-instance_method" target="_blank">http://opennebula.org/doc/4.2/oca/ruby/OpenNebula/VirtualMachine.html#allocate-instance_method</a></div>
<div dir="ltr">[4] <a href="https://github.com/OpenNebula/one/blob/master/src/tm_mad/common/context">https://github.com/OpenNebula/one/blob/master/src/tm_mad/common/context</a><br>--<br><div>Carlos Martín, MSc<br>Project Engineer</div>
<div>OpenNebula - Flexible Enterprise Cloud Made Simple<br><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></div><div class="gmail_extra"><br></div><div class="gmail_extra"><div class="gmail_quote">On Tue, Nov 26, 2013 at 4:02 PM, Olivier Sallou <span dir="ltr"><<a href="mailto:olivier.sallou@irisa.fr" target="_blank">olivier.sallou@irisa.fr</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 bgcolor="#FFFFFF" text="#000000"><div>
<br>
<div>On 11/26/2013 03:04 PM, Simon Boulet
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Bonjour Olivier,
<div><br>
</div>
<div>I think there are two issues in your question.<br>
<div><br>
</div>
<div class="gmail_extra">
<div class="gmail_quote">On Tue, Nov 26, 2013 at 5:55 AM,
Olivier Sallou <span dir="ltr"><<a href="mailto:olivier.sallou@irisa.fr" target="_blank">olivier.sallou@irisa.fr</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 bgcolor="#FFFFFF" text="#000000">
<div> <br>
<div>On 11/26/2013 11:51 AM, Olivier Sallou wrote:<br>
</div>
<blockquote type="cite"> <br>
<div>On 11/26/2013 11:14 AM, Carlos Martín Sánchez
wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">
<div>stored in VM/USER_TEMPLATE. You can see
this with the onevm show -x command. The
onevm update action only allows to edit the
USER_TEMPLATE attributes, and as you
described, the create hook is triggered
after the VM has been correctly created.</div>
<div><br>
</div>
</div>
</blockquote>
</blockquote>
</div>
</div>
</blockquote>
<div><br>
</div>
<div>First, yes, you can use the VM CREATE hooks to inject
or change the USER_TEMPLATE attributes by issuing the
onevm update action. To prevent VMs from being deployed
before the hooks has run, you can set VM_SUBMIT_ON_HOLD
= "YES", and have your hook do a onevm release at the
end of its execution for the scheduler to pick and
deploy the VM. This will make sure that when the VM is
deployed, the template contains all the attributes you
wanted.</div>
<div>
<div><br>
</div>
<div>You can also do some extra sanitization / filtering
and not allow the VM to be deployed if contains some
missing attributes, etc. by not calling the onevm
release at the end.</div>
</div>
<div><br>
</div>
<div>This works very well for us. In fact, we do some
heavy stuff in the hooks, such as attaching additional
IP addresses, attaching or detaching disks, etc.
dynamically according to external sources, such as the
OpenNebula user template (but also external databases,
CRM, etc.)</div>
</div>
</div>
</div>
</div>
</blockquote></div>
My hook job is ok regarding vm user_template update, I tried with
and without VM_SUBMIT_ON_HOLD (thanks for the hint), but I have the
same issue, my user_template variables are not set in the context.sh
file.<div><br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div class="gmail_extra">
<div class="gmail_quote">
<div><span style="color:rgb(80,0,80)"> </span><br>
</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 bgcolor="#FFFFFF" text="#000000">
<div>
<blockquote type="cite"> What I expect is to get my
USER_TEMPLATE in the context.sh mounted in my VM.<br>
<br>
A basic use case is to generate a unique password
for a web application running in the VM. I'd like
to generate the passsword with a hook and send the
password to the user by mail (until here, this is
fine). The generated password is also in the VM
context/template so that it appears in the
context.sh of the VM. At startup, a specific init
script read the VM contextualization and init the
web application with the password provided.<br>
</blockquote>
</div>
The above example could be managed directly in the VM,
without specific contextualization, but there are
cases where some variables could be user dependent, so
those variables would need to be set dynamically on
opennebula server side.
<div>
<div><br>
</div>
</div>
</div>
</blockquote>
<div><br>
</div>
<div><br>
</div>
<div>Perhaps that's the real problem here... I'm not very
familiar with context.sh script. Is the entire VM
template available (including the USER_TEMPLATE) or only
the CONTEXT section?</div>
</div>
</div>
</div>
</div>
</blockquote>
<br></div>
user_template is not set by itelf in the vm context file, only the
context. But in my context, I add variables that refer to
USER_TEMPLATE (but it is right that there are not set in first
place, only after hooks). So it seems that we can refer to
USER_TEMPLATE var, but only if there are predefined, not added in a
hook (template not regenerated/calculated).<br>
<br>
the best would be to have user_template vars added to the context.sh
file in addition to the one in the vm template, AFTER the hooks.<br>
<br>
Olivier<br>
<blockquote type="cite">
<div dir="ltr">
<div>
<div class="gmail_extra">
<div class="gmail_quote">
<div><br>
</div>
<div>Simon</div>
</div>
<br>
</div>
</div>
</div>
</blockquote><div>
<br>
<pre cols="72">--
Olivier Sallou
IRISA / University of Rennes 1
Campus de Beaulieu, 35000 RENNES - FRANCE
Tel: 02.99.84.71.95
gpg key id: 4096R/326D8438 (<a href="http://keyring.debian.org" target="_blank">keyring.debian.org</a>)
Key fingerprint = 5FB4 6F83 D3B9 5204 6335 D26D 78DC 68DB 326D 8438
</pre>
</div></div>
<br>_______________________________________________<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></div>