[one-users] Run bash script in vm on spin-up

Pavel Tankov pavel.tankov at strategyobject.com
Fri Nov 28 07:29:04 PST 2014


OK, it seems I wasn't right. Opennebula DOES honor the INIT_SCRIPTS entry.

I am sorry for blaming you!

Why I got confused, though? Well, I was testing with a VM and its 
template. With every new change that I made to the template I went to 
the VM (via Sunstone GUI) and chose from the toolbar the button that 
says "Delete recreate", thinking that it will do what it says - namely 
it will delete the VM and then recreate it. Appears that wasn't quite 
the case. When I clicked the rightmost red button and chose "Delete" and 
then deployed the template again, the changes that I had made to the 
template actually took effect.

Question: Why "Delete recreate" doesn't do just like when you manually 
delete the VM and then re-deploy from template?

P.S.: Kerry, I discovered how to create CONTEXT files and put them to 
the "files" datastore, don't need to answer me. There is a nice menu in 
Sunstone called "Files & Kernels" which I somehow kept skipping. :)
About your problem with test.sh - see if you have fallen in the same 
trap as me - try to first manually delete the VM and then re-deploy it 
from template for your changes to take effect. Other than that, all 
settings work like expected.

Thanks,
Pavel Tankov

On 28.11.2014 12:44, Pavel Tankov wrote:
> Hello Kerry,
>
> I am having the same problem. I think I discovered why your test.sh 
> script doesn't get executed:
>
> !!! Opennebula completely disregards the INIT_SCRIPTS="test.sh" entry 
> in your CONTEXT=[...] section of the template !!!
>
> How to verify? After your VM spins up, login and mount the CONTEXT 
> image like so:
>
> mount -t iso9660 /dev/sr0 /mnt
>
> Enter /mnt and you will find your test.sh file there. So far so good. 
> There is one more file there - context.sh. You can see that it 
> contains the variables from your CONTEXT=[...] section of the 
> template. You can see that it contains an entry like FILES_DS='...' or 
> FILES='/var/lib/one/datastores/2/test.sh' that mentions your script. 
> HOWEVER, it does NOT contain an entry like INIT_SCRIPTS="test.sh". OK, 
> so now open /etc/one-context.d/99-execute-scripts. That script is 
> responsible for executing your custom scripts. Here it is:
>
> #!/bin/bash
>
> MOUNT_DIR=/mnt
> TMP_DIR=/tmp/one-context-tmp
>
> if [ -z "$INIT_SCRIPTS" ]; then
>     if [ -f "$MOUNT_DIR/init.sh" ]; then
>         INIT_SCRIPTS=init.sh
>     fi
> fi
>
> mkdir -p $TMP_DIR
> cd $MOUNT_DIR
>
> for f in $INIT_SCRIPTS; do
>     cp $f $TMP_DIR
>     chmod +x $TMP_DIR/$f
>     $TMP_DIR/$f
> done
>
> In the beginning it checks to see if there is an environment 
> variableINIT_SCRIPTS defined. It is never defined, no matter whether 
> you put INIT_SCRIPTS="test.sh" in your CONTEXT=[...] or not because, 
> as it seems, Opennebula silently disregards it. So, in that case the 
> 99-execute-scripts script continues with the default, which is init.sh.
>
> TL; DR;
> Name your script init.sh and it will be executed.
>
> Opennebula devs, please, fix this!
>
> P.S.: Kerry, you say:
> /> I have created "test.sh" and put it into the "files" datastore on the//head node./
> Please, explain how you did it, because I can't seem to find a 
> step-by-step explanation about this in the documentation.
>
> Thanks,
> -- Pavel Tankov
>
> On 12.09.2014 02:28, kerryhall . wrote:
>> Hi Valentin,
>>
>> I appreciate the help! I managed to create a new CONTEXT image, which 
>> copied my test.sh to the datastore successfully, and I updated my 
>> template to include those two lines you specified.
>>
>> However, it looks like test.sh is not executing on vm spin up. 
>> Currently all it does is "touch /root/test.tmp" to confirm execution. 
>> However when I booted my vm, this file was not created. Also tried 
>> doing "useradd tmp" as well, with no luck. test.sh has executable 
>> flag set for user, group, and other. I also tried setting permissions 
>> of test.sh to 777, still no luck.
>>
>> Thanks!!
>> Kerry
>>
>>
>>
>>
>> On Mon, Sep 8, 2014 at 11:27 PM, Valentin Bud <valentin.bud at gmail.com 
>> <mailto:valentin.bud at gmail.com>> wrote:
>>
>>     Hello Kerry,
>>
>>     Do you have a registered image of type CONTEXT with the name of
>>     `test.sh`
>>     in the files datastore?
>>
>>     The file you specify in FILES_DS can be found in the
>>     contextualization CDROM
>>     on the VM (/dev/disk/by-label/CONTEXT).
>>
>>     The following would run a `test.sh` script when the VM is spun up
>>     at the end
>>     of the contextualization routine [1].
>>
>>     CONTEXT = [
>>     FILES_DS="$FILE[IMAGE=\"test.sh\"]",
>>     INIT_SCRIPTS="test.sh",
>>     ...
>>     ]
>>
>>     [1]:
>>     https://github.com/OpenNebula/addon-context-linux/blob/master/base/etc/one-context.d/99-execute-scripts
>>
>>     Best,
>>     Valentin
>>
>>
>>     On Mon, Sep 8, 2014 at 11:09 PM, kerryhall . <kerryhall at gmail.com
>>     <mailto:kerryhall at gmail.com>> wrote:
>>
>>         Thanks! I'm still having issues here unfortunately. I tried
>>         putting:
>>
>>         FILES_DS="$FILE[IMAGE=\"test.sh\"]"
>>
>>         into my template context section, but I get:
>>
>>         "User 0 does not own an image with name: test.sh"
>>
>>         I'm not trying to include an image, I just want test.sh (a
>>         file in my file datastore) to get copied to anywhere on my
>>         vm's filesystem. (And eventually, I want test.sh to get run
>>         on vm creation, or failing that, every time the vm starts)
>>
>>         Thanks!!
>>
>>         On Fri, Jul 25, 2014 at 11:18 PM, Valentin Bud
>>         <valentin.bud at gmail.com <mailto:valentin.bud at gmail.com>> wrote:
>>
>>             Hello Kerry,
>>
>>             Under "Defining Context" [1] there is an example how to
>>             use FILES_DS.
>>
>>             FILES_DS="$FILE[IMAGE=\"test.sh\"]
>>
>>             [1]:
>>             http://docs.opennebula.org/4.6/user/virtual_machine_setup/cong.html
>>
>>             Best,
>>             Valentin
>>
>>
>>
>>             On Fri, Jul 25, 2014 at 11:29 PM, kerryhall .
>>             <kerryhall at gmail.com <mailto:kerryhall at gmail.com>> wrote:
>>
>>                 Hi folks,
>>
>>                 I am trying to run a bash script on a vm as it gets
>>                 spun up. I've read:
>>                 http://docs.opennebula.org/4.6/user/virtual_machine_setup/cong.html
>>
>>                 but there isn't too much to go on there.
>>
>>                 I have created "test.sh" and put it into the "files"
>>                 datastore on the head node.
>>
>>                 The issue I am having is that the syntax in the
>>                 "Defining Context" section of
>>                 http://docs.opennebula.org/4.6/user/virtual_machine_setup/cong.html
>>                 is ambiguous, specifically the "files_ds" section. I
>>                 have tried:
>>
>>                 FILES_DS="$FILE[\"test.sh\"]"
>>
>>                 and
>>                 FILES_DS="/var/lib/one/datastores/2/test.sh"
>>
>>                 As a first step, I'm just trying to get this file
>>                 included in my vm at all.
>>
>>                 Thanks!
>>                 Kerry
>>
>>
>>                 _______________________________________________
>>                 Users mailing list
>>                 Users at lists.opennebula.org
>>                 <mailto:Users at lists.opennebula.org>
>>                 http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>>
>>
>>
>>
>>
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opennebula.org
>> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>
>
>
> _______________________________________________
> Users mailing list
> Users at lists.opennebula.org
> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opennebula.org/pipermail/users-opennebula.org/attachments/20141128/071e5854/attachment-0001.htm>


More information about the Users mailing list