[one-users] ONE context package
Javier Fontan
jfontan at opennebula.org
Fri Feb 28 09:20:47 PST 2014
I've uploaded the scripts to the branch feature-2453 for both deb and
rpm based distros.
DNS_HOSTNAME=yes: gets the first ip and tries to get the dns name with "host"
SET_HOSTNAME=name.of.the.host: sets the hostname
I'll try to create the packages before leaving the office but you can
follow the instructions there in case you want to create them
yourself.
[1] https://github.com/OpenNebula/one/tree/feature-2453/share/scripts/context-packages
On Thu, Feb 27, 2014 at 10:29 PM, ML mail <mlnospam at yahoo.com> wrote:
> Hi Javier,
>
> Thanks for the example with using $NAME in the SET_HOSTNAME context variable
> that for sure helps not having one template per VM. Although I already see
> the next problem, you can't have spaces in your VM name but that's a detail
> :)
>
> I totally agree regarding the dynamic hostname based on the PTR DNS record
> of the VM, it should not be a default but only activated through a context
> variable, like you mention DNS_HOSTNAME variable is fine. Right now no other
> ideas just as simple as possible by doing a reverse lookup on the first/main
> IP of the VM should be enough I would say.
>
> I guess the "host" command would be the one which should always be
> available. I have seen cases where there was no "dig" installed on a base
> linux installation and "nslookup" is sort of fading out. In the worst case
> if the host command does not exist nothing happens or it could fallback to
> dig.
>
> Greetings,
> ML
>
>
> On Thursday, February 27, 2014 4:27 PM, Javier Fontan
> <jfontan at opennebula.org> wrote:
> On Thu, Feb 27, 2014 at 2:13 PM, ML mail <mlnospam at yahoo.com> wrote:
>
>> You are right I had to define the HOSTNAME variable in the template
>> context
>> and not as a tag in the already running VM. This means that I can't share
>> templates among VMs, which is a bit stupid of course. With this solution
>> you
>> need one template per VM.
>
> Not exactly. The value of custom variables can be a dynamic one [1] so
> for example you can set the hostname to the name of the VM:
>
> SET_HOSTNAME="$NAME"
>
> or even a mix of static and dynamic data:
>
> SET_HOSTNAME="$NIC[IP].domain.com"
>
> [1]
> http://docs.opennebula.org/stable/user/virtual_machine_setup/cong.html#using-template-variables
>
>> I see the issue with the HOSTNAME environment variable which is actually
>> set
>> at bootup of Linux so no problem with me for using a name such as
>> SET_HOSTNAME like you suggest.
>
> Good, I'll go with this.
>
>> What do you think about having that same script also defining the hostname
>> dynamically (if none was defined with the SET_HOSTNAME context variable)
>> based on a DNS reverse lookup if the IP address of the VM has a PTR
>> record?
>
> I think it's a nice feature but it should only be set if the users
> asks for it. For example, if some VM has a hardcoded hostname a user
> does not expect it to be changed in case SET_HOSTNAME is not defined.
> Another variable can be added like DNS_HOSTNAME=yes or even better,
> specifying the IP where to get the name from:
>
> DNS_HOSTNAME="$NIC[IP, NETWORK=\"Public\"]"
>
> Any better idea?
>
> I'm not sure which command to use to do the reverse lookup. One that
> is in most of the distributions like host, nslookup or dig.
>
> Cheers
>
>>
>>
>>
>> On Thursday, February 27, 2014 12:27 PM, Javier Fontan
>> <jfontan at opennebula.org> wrote:
>> Hi,
>>
>> ML, I think you should add it in the template context section, custom
>> variables.
>>
>> I am adding scripts to configure the hostname in the context phase.
>> These are simple scripts (one for rpm and other for deb based distros)
>> that do just what you've commented, call hostname and modify the conf
>> file. [1]
>>
>> I've just found a problem with it and it is calling the configuration
>> variable "HOSTNAME". The shell automatically sets HOSTNAME and even if
>> we don't specify it so it's a bit tricky to check wether the user
>> intents to configure the hostname or leave it as it is.
>>
>> I am proposing to use the custom variable "SET_HOSTNAME" to configure
>> the host name. What do you think?
>>
>> Concerning the addition of scripts in the context package, there is a
>> guide in both the documentation [2] and the source code [3] on how to
>> create custom packages. Having the required dependencies it's fairly
>> easy to add or modify the configuration script you may need.
>>
>> Cheers
>>
>> [1] http://dev.opennebula.org/issues/2453
>> [2]
>>
>> http://docs.opennebula.org/stable/user/virtual_machine_setup/cong.html#generating-custom-contextualization-packages
>> [3]
>>
>> https://github.com/OpenNebula/one/tree/master/share/scripts/context-packages
>>
>> On Thu, Feb 27, 2014 at 8:02 AM, ML mail <mlnospam at yahoo.com> wrote:
>>> Regarding the hostname script that's exactly what I did, I also tried to
>>> redeploy this persistent image. Where exactly did you set the HOSTNAME
>>> variable? I have setted it in the tags of that specific VM (where I would
>>> also add the SSH_PUBLIC_KEY variable). But that might be wrong?
>>>
>>> Regards,
>>> ML
>>>
>>>
>>> On Thursday, February 27, 2014 2:47 AM, "Campbell, Bill"
>>> <bcampbell at axcess-financial.com> wrote:
>>> For item 1, no that should do it, just make sure it's executable and it
>>> should run. (the vmcontext init.d script will run all scripts in the
>>> /etc/one-context.d directory in order). I set this up for Ubuntu, but
>>> I'm
>>> pretty sure Debian is the same when it comes to setting the hostname.
>>> You
>>> mention you reboot the VM, you may have to redeploy (as the context
>>> script
>>> is already generated from your previous deployment package).
>>>
>>> For item 2, you could include it in your base image, or in the example
>>> provided, add it to the files repository along with that init.sh script,
>>> and
>>> then assign both files to the template. This way the files will be
>>> included
>>> with the context information, will copy the ##-script over to the
>>> instance,
>>> and restart the vmcontext service.
>>>
>>> ________________________________
>>> From: "ML mail" <mlnospam at yahoo.com>
>>> To: "users" <users at lists.opennebula.org>
>>> Sent: Wednesday, February 26, 2014 11:12:08 AM
>>> Subject: Re: [one-users] ONE context package
>>>
>>> Hi Bill,
>>>
>>> Thanks for your answer and example scripts. I have a few more questions
>>> or
>>> issues regarding your examples:
>>>
>>> - I tried out your small hostname script which I have copied on my Debian
>>> 7
>>> VM under /etc/one-context.d/98-hostname. I have then set in my VM a tag
>>> called HOSTNAME with a value and rebooted the VM. Unfortunately the
>>> hostname
>>> did not get changed. Did I miss something here?
>>>
>>> - I suppose I would have to re-create the one-context package manually if
>>> I
>>> would like to include the aforementioned 98-hostname script in the
>>> official
>>> one-context package, correct? or I could manually copy it into my image
>>> before deploying it?
>>>
>>> Regards,
>>> ML
>>>
>>>
>>>
>>> On Wednesday, February 26, 2014 3:08 PM, "Campbell, Bill"
>>> <bcampbell at axcess-financial.com> wrote:
>>> We don't have the automatic lookup from DNS (that would rely on the DNS
>>> record being created first prior to VM deployment), but we use a script
>>> that
>>> is placed in our base images /etc/one-context.d/ directory that does this
>>> (which relies on option 2 as you mention below, a HOSTNAME context
>>> variable):
>>>
>>> #!/bin/bash
>>>
>>> if [ -f /mnt/context.sh ]; then
>>> . /mnt/context.sh
>>> else
>>> exit 0
>>> fi
>>> hostname $HOSTNAME
>>> echo $HOSTNAME > /etc/hostname
>>>
>>> exit 0
>>>
>>> The above example is for our Ubuntu instances, so it may need to be
>>> modified
>>> for RHEL or SUSE based virtuals, if that's what you use.
>>>
>>> In addition, if using 4.4, use the files datastore and create an
>>> 'init.sh'
>>> script that can then load up additional files that you assign to the
>>> template (so you don't need to manually update each image). We use an
>>> init.sh script like this to inject new configuration/contextualization
>>> options so we don't need to update our base image very often:
>>>
>>>
>>> #!/bin/sh
>>> #
>>> # OpenNebula Init Script
>>> #
>>> # init.sh
>>> #
>>> # Copies additional context scripts to the appropriate directory
>>> #
>>> ## Set environment
>>> SOURCE=/mnt
>>> DEST=/etc/one-context.d
>>>
>>> if [ -f /etc/redhat-release ]; then
>>> OSVERSION=RHEL
>>> else
>>> OSVERSION=UBUNTU
>>> fi
>>> if [ -f /usr/bin/rsync ]; then
>>> echo "Applying additional contextualization scripts..."
>>> else
>>> if [ "$OSVERSION" != "UBUNTU" ]; then
>>> yum -y install rsync
>>> else
>>> apt-get update && apt-get -y install rsync
>>> fi
>>> fi
>>>
>>> ## Copy Files. This will IGNORE any *.sh files in the source/destination
>>> directories, as all context scripts
>>> ## should NOT have the .sh extension.
>>> for i in $(ls $SOURCE --ignore=*.sh)
>>> do
>>> if [ -f $DEST/$i ]; then
>>> echo "$i exists in context directory. Skipping..."
>>> else
>>> rsync -au $SOURCE/$i /etc/one-context.d/
>>> chown root.root /etc/one-context.d/*
>>> chmod 700 /etc/one-context.d/*
>>> service vmcontext restart
>>> fi
>>> done
>>> exit 0
>>>
>>> This will check the OS Version and install the appropriate package. It
>>> will
>>> NOT copy any file that has the .sh extension, but if you follow the
>>> context
>>> script standard of ##-<scriptname> then you can add additional context
>>> upon
>>> deployment. Rudimentary, sure, but works well enough for us.
>>>
>>>
>>> ________________________________
>>> From: "ML mail" <mlnospam at yahoo.com>
>>> To: users at lists.opennebula.org
>>> Sent: Wednesday, February 26, 2014 5:39:46 AM
>>> Subject: [one-users] ONE context package
>>>
>>> Hi,
>>>
>>> I am very happy with the ONE context package for automated
>>> contextualization
>>> on Debian and CentOS but I miss one feature: automatically and manually
>>> setting the hostname of the VM.
>>>
>>> Basically it would be great to have the following two options:
>>>
>>> - automatically set the hostname of the VM based doing a reverse DNS
>>> lookup
>>> on the IP address, for example I have as reverse DNS entry
>>> "one-vm-1-0-16-172.mydomain.com" then the hostname of my VM would be
>>> automatically set to "one-vm-1-0-16-172".
>>> - using a HOSTNAME tag in the VM to manually enter a hostname and
>>> overriding
>>> the automatic hostname attribution described above
>>>
>>> What do you think?
>>>
>>> Regards,
>>> ML
>>>
>>> _______________________________________________
>>> Users mailing list
>>> Users at lists.opennebula.org
>>> http://lists.opennebula.org/listinfo.cgi/users-opennebula.org
>>>
>>>
>>> NOTICE: Protect the information in this message in accordance with the
>>> company's security policies. If you received this message in error,
>>> immediately notify the sender and destroy all copies.
>>>
>>>
>>> _______________________________________________
>>> 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
>>>
>>>
>>> NOTICE: Protect the information in this message in accordance with the
>>> company's security policies. If you received this message in error,
>>> immediately notify the sender and destroy all copies.
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>>
>>
>>
>>
>> --
>> Javier Fontán Muiños
>> Developer
>> OpenNebula - The Open Source Toolkit for Data Center Virtualization
>> www.OpenNebula.org | @OpenNebula | github.com/jfontan
>
>>
>
>
>
> --
> Javier Fontán Muiños
> Developer
> OpenNebula - The Open Source Toolkit for Data Center Virtualization
> www.OpenNebula.org | @OpenNebula | github.com/jfontan
>
>
--
Javier Fontán Muiños
Developer
OpenNebula - The Open Source Toolkit for Data Center Virtualization
www.OpenNebula.org | @OpenNebula | github.com/jfontan
More information about the Users
mailing list