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....@gmail.com <mailto:valentin....@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 . <kerryh...@gmail.com
    <mailto:kerryh...@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....@gmail.com <mailto:valentin....@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 .
            <kerryh...@gmail.com <mailto:kerryh...@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@lists.opennebula.org
                <mailto:Users@lists.opennebula.org>
                http://lists.opennebula.org/listinfo.cgi/users-opennebula.org







_______________________________________________
Users mailing list
Users@lists.opennebula.org
http://lists.opennebula.org/listinfo.cgi/users-opennebula.org



_______________________________________________
Users mailing list
Users@lists.opennebula.org
http://lists.opennebula.org/listinfo.cgi/users-opennebula.org

_______________________________________________
Users mailing list
Users@lists.opennebula.org
http://lists.opennebula.org/listinfo.cgi/users-opennebula.org

Reply via email to