On Tue, Jun 3, 2014 at 1:52 PM, Aaron Peeler <[email protected]> wrote:
> Would using the private IP instead of hostnames resolve it? It would
> take a bit of work, but could be done.

Yup that would work...as far as I can tell. :)

Thanks,
Curtis.

>
> Aaron
>
>
>
> On Tue, Jun 3, 2014 at 3:22 PM, Curtis <[email protected]> wrote:
>> On Tue, Jun 3, 2014 at 11:53 AM, YOUNG OH <[email protected]> wrote:
>>> Hi Curtis,
>>>
>>> Thank you for updating the status and correction about the OpenStack Perl
>>> SDKs.
>>>
>>> If DNS lookup is not reliable to find the private ip of an instance for a
>>> multi-host openstack environment, then do you have any suggestion to deal
>>> with this issue?
>>>
>>> At this point, I think at least we have an agreement that we do NOT want to
>>> use /etc/hosts anymore, right?
>>> If so, we can first try to use the database to get/update the private ip
>>> address with DNS lookup for a single-host openstack environment. After
>>> that, we can try to find a solution to manage the DNS lookup or other
>>> methods of finding the private ip of an instance in multi-host openstack
>>> environment. If you have any other suggestions, please let me know.
>>>
>>
>> I'm not too sure what to do. I'm hoping the Apache VCL core devs chime in.
>>
>> As far as I can tell, Apache VCL needs DNS resolution to work, so
>> simply adding the IP into the database isn't going to be enough.
>>
>> For the current Apache VCL + OpenStack multihost cloud installation
>> I'm working on I'm just going to add a python script that queries
>> OpenStack and generates /etc/hosts every 20 or 30 seconds or something
>> like that.
>>
>> Thanks,
>> Curtis.
>>
>>> Thanks,
>>> Young-Hyun
>>>
>>>
>>>
>>> On Mon, Jun 2, 2014 at 3:56 PM, Curtis <[email protected]> wrote:
>>>
>>>> On Mon, Jun 2, 2014 at 12:45 PM, YOUNG OH <[email protected]> wrote:
>>>> > Hi All,
>>>> >
>>>> > I would like to bring your attention again to discuss what OpenStack
>>>> module
>>>> > should include. I would like to discus two issues first.
>>>> >
>>>> > First, we know that using /etc/hosts to get the private ip of an instance
>>>> > can be problematic. Specifically, Cameron (at Cybera) and I had found
>>>> that
>>>> > there might duplicated or blank entries and rarely but OpenStack APIs
>>>> > cannot get the private ip (not populated) of an instance properly. For
>>>> the
>>>> > later case, Cameron added DNS Lookup function to get the correct private
>>>> IP
>>>> > (Cameron, correct me if I am wrong). This problem leads us to avoid using
>>>> > /etc/hosts file to get the private ip but I think we need to first
>>>> discuss
>>>> > what the best way is to handle the private ip:
>>>> >
>>>> > (a). Use the privateIPaddress field in computer table.
>>>> > Andy suggests that we can change the get_computer_private_ip to get
>>>> private
>>>> > ip from the database instead of using /etc/hosts (Andy, correct me if I
>>>> am
>>>> > wrong). I agree with his idea because this can avoid duplicated or blank
>>>> > entry problem of using /etc/hosts.
>>>> >
>>>> > (b). OpenStack (DNS lookup for finding unpopulated private ip)
>>>> > In our openstack module, DNS lookup or other methods (if any) can give
>>>> the
>>>> > correct the private ip of the instance in order to deal with the problem
>>>> > for the private ip not being populated in the hosts file. Cameron
>>>> modified
>>>> > the get_computer_private_ip in DataStructure.pm to do a DNS lookup
>>>> instead
>>>> > of using the hosts file. But I would like to suggest that if possible, it
>>>> > can be better to add the DNS lookup function to openstack module rather
>>>> > than changing the DataStructure.pm. That is, we can update the
>>>> > privateIPaddress field in computer table using DNS lookup instead of
>>>> > injecting the private ip to /etc/hosts in openstack module.
>>>>
>>>> We've just found out recently that the helpful DNS resolution that
>>>> openstack provides does not work well in a mutlihost openstack
>>>> environment, so can't be relied on. In multihost mode each compute
>>>> host only knows about the vms running on it locally.
>>>>
>>>> >
>>>> > I think, if possible, one of the best methods for dealing with the
>>>> private
>>>> > ip is that we can use the database to get the private ip of an instance
>>>> and
>>>> > using DNS lookup in openstack module to update the information. Any
>>>> > suggestions and corrections about my opinion would be very helpful to
>>>> solve
>>>> > this problem.
>>>> >
>>>> > Second, currently we have two versions (not exactly but for convenience);
>>>> > one uses OpenStack command line interfaces (CLIs) and one uses OpenStack
>>>> > Perl SDKs. As I understand, the Perl SDKs are wrapper APIs for the
>>>> > OpenStcak CLIs and required to install through CPAN. I think both
>>>> versions
>>>> > have pros and cons. So, I would like to ask your opinions whether it is
>>>> > better to include two different openstack versions to the next VCL
>>>> release,
>>>> > to find a way to merge two versions into one openstack module, OR to
>>>> create
>>>> > a higher level of openstack module so that it can choose one version
>>>> based
>>>> > on user's environment. Any suggestions would be also very helpful to
>>>> decide
>>>> > how we can manage openstack module. Thank you.
>>>>
>>>> FYI -- The perl openstack sdk is not a wrapper for the command line
>>>> utils. It uses the openstack api, not the command line tools.
>>>>
>>>> Thanks,
>>>> Curtis.
>>>>
>>>> >
>>>> > Best regards,
>>>> > Young-Hyun
>>>> >
>>>> >
>>>> >
>>>> > On Mon, Jun 2, 2014 at 2:22 PM, YOUNG OH <[email protected]>
>>>> wrote:
>>>> >
>>>> >> Hi All,
>>>> >>
>>>> >> I have tested my openstack module (
>>>> >> https://issues.apache.org/jira/browse/VCL-590) on the OpenStack
>>>> Icehouse
>>>> >> (The ninth release of OpenStack, April 17, 2014) and I could
>>>> provisioning a
>>>> >> Linux image through it.
>>>> >>
>>>> >> The environment details are as follows:
>>>> >>
>>>> >> 1. Host Blade
>>>> >> :- CPU: Intel(R) Xeon(R) CPU  E5645  @ 2.40GHz
>>>> >> :- Memory: 49G
>>>> >> :- Disk: 134G
>>>> >> :- OS: RHEL 6.4 x64 with KVM hypervisor
>>>> >> 2. OpenStack Icehouse Components
>>>> >> :- Compute
>>>> >> :- Network (Nova-Network, not OpenStack Neutron)
>>>> >> :- Glance
>>>> >> 3. Provisioning Linux image
>>>> >> :- CentOS 6.3 x64
>>>> >> 4. VCL 2.3
>>>> >>
>>>> >> In this test, I've just tested the provisioning an image but I would
>>>> like
>>>> >> to post the detail information to jira once I finish other test. In
>>>> >> addition, I will try to add a function of selecting OpenStack flavors
>>>> based
>>>> >> on the size of an image. The current openstack module sets flavors for
>>>> each
>>>> >> image because the previous OpenStack releases (Essex as I know) didn't
>>>> >> support the size information of images but now it supports. I will also
>>>> >> post to jira issue when I add the function to my module. Thank you.
>>>> >>
>>>> >> Best regards,
>>>> >> Young-Hyun
>>>> >>
>>>> >>
>>>> >>
>>>> >> On Mon, Mar 31, 2014 at 12:55 PM, Cameron Mann <[email protected]>
>>>> >> wrote:
>>>> >>
>>>> >>> >
>>>> >>> > I haven't looked at Try::Tiny or any newer exception handling
>>>> features
>>>> >>> of
>>>> >>> > Perl, but I'd prefer to keep the number of external modules to a
>>>> >>> minimum if
>>>> >>> > possible.  If there are new features in Perl which would be
>>>> beneficial,
>>>> >>> I'd
>>>> >>> > rather make the newer version of Perl a requirement and use the
>>>> built in
>>>> >>> > features.  Otherwise, we're locked into using an external module,
>>>> >>> usually
>>>> >>> > from CPAN, which has no quality assurance.  I regret adding some of
>>>> the
>>>> >>> > current modules such as InsideOut, rather then writing the code which
>>>> >>> could
>>>> >>> > accomplish the same objective.
>>>> >>> > Did you need to catch exceptions because one of the OpenStack modules
>>>> >>> > you're using may throw a die exception?  When this happens, the
>>>> entire
>>>> >>> vcld
>>>> >>> > process for the reservation exits abruptly which causes problems
>>>> such as
>>>> >>> > the request state remaining in pending indefinitely.  This happens
>>>> even
>>>> >>> if
>>>> >>> > you wrap the call in an eval block.  I have worked around this
>>>> problem
>>>> >>> > before by locally overriding the die handler.  Take a look at
>>>> >>> > vSphere_SDK.pm and find lines such as:
>>>> >>> > # Override the die handler
>>>> >>> > local $SIG{__DIE__} = sub{};
>>>> >>> > The vSphere SDK is one example which may call die (via Carp).  If
>>>> this
>>>> >>> > happens with die overridden, the eval block returns normally.  If an
>>>> >>> > exception occurred, $EVAL_ERROR should be set.
>>>> >>>
>>>> >>>
>>>> >>> The OpenStack SDK throws exceptions when requests that
>>>> >>> delete/modify/create
>>>> >>> resources fail, no die exceptions though. There wasn't any specific
>>>> >>> feature
>>>> >>> that made me choose Try::Tiny, it was more my unfamiliarity with
>>>> exception
>>>> >>> handling in Perl which seemed to have a number of gotchas prior to
>>>> 5.14 so
>>>> >>> I figured it'd be better to let someone else's code worry about that.
>>>> >>>
>>>> >>>
>>>> >>>
>>>> http://blog.twoshortplanks.com/2011/06/06/unexceptional-exceptions-in-perl-5-14/
>>>> >>>
>>>> >>> I see no problems.  Any barriers or difficulty you encounter with the
>>>> core
>>>> >>> > code should be addressed by improving the core code.
>>>> >>> > Reworking the dependency on /etc/hosts is something I'd like to
>>>> improve
>>>> >>> > regardless.  People often encounter problems with this if they
>>>> forget to
>>>> >>> > add entries to /etc/hosts for all their computers, including the
>>>> >>> management
>>>> >>> > node(s).  I'd like to not read /etc/hosts on the management node at
>>>> all
>>>> >>> and
>>>> >>> > have the value in the computer table be authoritative.  This should
>>>> >>> > facilitate cases where the provisioning module needs to do something
>>>> >>> > different regarding private IPs such as if they are dynamically
>>>> >>> allocated.
>>>> >>> >  The provisioning module would retrieve the IP when the image gets
>>>> >>> loaded
>>>> >>> > by querying DNS or some other method and then update the database.
>>>>  The
>>>> >>> OS
>>>> >>> > module would then use this value to configure the computer.
>>>> >>>
>>>> >>>
>>>> >>> Sounds good. I agree that avoiding the hosts file would be best,
>>>> >>> especially
>>>> >>> in a case like this where it needs to be continuously modified. Here's
>>>> our
>>>> >>> changed get_computer_private_ip_address, lines 45-55 are the new code:
>>>> >>>
>>>> >>> https://gist.github.com/cmann/9896513
>>>> >>>
>>>> >>> Finally we're still working on putting together more comprehensive
>>>> >>> installation documentation for anyone who wants to try it out. We're
>>>> use
>>>> >>> automation for a number of the tasks and I haven't had a chance to run
>>>> >>> through it from scratch yet. For anyone feeling adventurous these are
>>>> the
>>>> >>> most basic instructions:
>>>> >>>
>>>> >>> 1. Apply the NAT patch
>>>> >>> (https://issues.apache.org/jira/browse/VCL-174tested on 2.3 and 2.3.1,
>>>> >>> make sure to read the Google doc)
>>>> >>> 2. Follow the instructions in the readme in the Github repo for the
>>>> >>> OpenStack module.
>>>> >>>
>>>> >>> Cameron
>>>> >>>
>>>> >>>
>>>> >>> On Fri, Mar 28, 2014 at 7:54 AM, Andy Kurth <[email protected]>
>>>> wrote:
>>>> >>>
>>>> >>> > >
>>>> >>> > >
>>>> >>> > > 2. We use the Try::Tiny module to handle exceptions since the
>>>> version
>>>> >>> of
>>>> >>> > > Perl VCL 2.3 uses doesn't support the saner try/catch mechanisms
>>>> >>> > available
>>>> >>> > > in newer releases, however this would add an additional dependency
>>>> to
>>>> >>> > VCL.
>>>> >>> > > Depending on the version of Perl VCL 2.4 is planning to use what
>>>> are
>>>> >>> > > people's thoughts on using Try::Tiny versus switching to Perl's
>>>> >>> internal
>>>> >>> > > mechanisms?
>>>> >>> > >
>>>> >>> >
>>>> >>> > I haven't looked at Try::Tiny or any newer exception handling
>>>> features
>>>> >>> of
>>>> >>> > Perl, but I'd prefer to keep the number of external modules to a
>>>> >>> minimum if
>>>> >>> > possible.  If there are new features in Perl which would be
>>>> beneficial,
>>>> >>> I'd
>>>> >>> > rather make the newer version of Perl a requirement and use the
>>>> built in
>>>> >>> > features.  Otherwise, we're locked into using an external module,
>>>> >>> usually
>>>> >>> > from CPAN, which has no quality assurance.  I regret adding some of
>>>> the
>>>> >>> > current modules such as InsideOut, rather then writing the code which
>>>> >>> could
>>>> >>> > accomplish the same objective.
>>>> >>> >
>>>> >>> > Did you need to catch exceptions because one of the OpenStack modules
>>>> >>> > you're using may throw a die exception?  When this happens, the
>>>> entire
>>>> >>> vcld
>>>> >>> > process for the reservation exits abruptly which causes problems
>>>> such as
>>>> >>> > the request state remaining in pending indefinitely.  This happens
>>>> even
>>>> >>> if
>>>> >>> > you wrap the call in an eval block.  I have worked around this
>>>> problem
>>>> >>> > before by locally overriding the die handler.  Take a look at
>>>> >>> > vSphere_SDK.pm and find lines such as:
>>>> >>> >
>>>> >>> > # Override the die handler
>>>> >>> > local $SIG{__DIE__} = sub{};
>>>> >>> >
>>>> >>> > The vSphere SDK is one example which may call die (via Carp).  If
>>>> this
>>>> >>> > happens with die overridden, the eval block returns normally.  If an
>>>> >>> > exception occurred, $EVAL_ERROR should be set.
>>>> >>> >
>>>> >>> >
>>>> >>> > >
>>>> >>> > > 3. I've saved the best for last, but first some background. The
>>>> >>> biggest
>>>> >>> > > change we've made is that we no longer rely on the /etc/hosts file
>>>> at
>>>> >>> all
>>>> >>> > > (though we haven't removed the code that keeps it up to date). We
>>>> had
>>>> >>> a
>>>> >>> > > number of issues with duplicate entries ending up in the hosts file
>>>> >>> and
>>>> >>> > > weren't able to pin down the exact cause. This led us to adding a
>>>> >>> table
>>>> >>> > to
>>>> >>> > > the database to track VCL computer to OpenStack instance mappings.
>>>> The
>>>> >>> > next
>>>> >>> > > issue we ran into was the private IP address not being populated in
>>>> >>> the
>>>> >>> > > hosts file. This happened very rarely and we're still unsure of the
>>>> >>> cause
>>>> >>> > > especially since there's an explicit check that the address is
>>>> >>> populated
>>>> >>> > > with a value before we write the hosts file. I'd assume that the
>>>> Nova
>>>> >>> API
>>>> >>> > > occasionally returns a response where the addresses component is
>>>> >>> > structured
>>>> >>> > > differently than we expect, though I was never able to directly
>>>> >>> observe
>>>> >>> > > this behavior. Since OpenStack automatically creates DNS entries
>>>> for
>>>> >>> new
>>>> >>> > > instances we decided the best course of action was to bypass the
>>>> hosts
>>>> >>> > file
>>>> >>> > > entirely. In the end we modified get_computer_private_ip_address in
>>>> >>> > > DataStructure.pm to do a DNS lookup rather than looking in the
>>>> hosts
>>>> >>> > file.
>>>> >>> > >
>>>> >>> > > The question for the community is are changes to core VCL code
>>>> >>> > acceptable?
>>>> >>> > > Or should we find a solution that keeps everything contained to the
>>>> >>> > > provisioning module? If changes to core code are acceptable we'd
>>>> also
>>>> >>> > have
>>>> >>> > > to decide on a method of detecting when to do a DNS lookup. Should
>>>> it
>>>> >>> > > depend on the provisioning module in use? A configuration option?
>>>> >>> >
>>>> >>> >
>>>> >>> > I see no problems.  Any barriers or difficulty you encounter with the
>>>> >>> core
>>>> >>> > code should be addressed by improving the core code.
>>>> >>> >
>>>> >>> > Reworking the dependency on /etc/hosts is something I'd like to
>>>> improve
>>>> >>> > regardless.  People often encounter problems with this if they
>>>> forget to
>>>> >>> > add entries to /etc/hosts for all their computers, including the
>>>> >>> management
>>>> >>> > node(s).  I'd like to not read /etc/hosts on the management node at
>>>> all
>>>> >>> and
>>>> >>> > have the value in the computer table be authoritative.  This should
>>>> >>> > facilitate cases where the provisioning module needs to do something
>>>> >>> > different regarding private IPs such as if they are dynamically
>>>> >>> allocated.
>>>> >>> >  The provisioning module would retrieve the IP when the image gets
>>>> >>> loaded
>>>> >>> > by querying DNS or some other method and then update the database.
>>>>  The
>>>> >>> OS
>>>> >>> > module would then use this value to configure the computer.
>>>> >>> >
>>>> >>> > One comment regarding adding tables... great!  Add all the tables you
>>>> >>> think
>>>> >>> > are beneficial.  I have seen some try to work around the current
>>>> >>> database
>>>> >>> > schema rather than adding to it.  There's no reason for this.  If
>>>> there
>>>> >>> are
>>>> >>> > configuration options which apply only to OpenStack, add something
>>>> like
>>>> >>> an
>>>> >>> > openstackconfig table.  If the vmprofile table doesn't align, add
>>>> >>> something
>>>> >>> > like an openstackprofile table.  If there are general options such as
>>>> >>> how
>>>> >>> > to handle DNS or private IP resolution, we could add a more general
>>>> >>> table
>>>> >>> > or possibly extend the managementnode or computer table.
>>>> >>> >
>>>> >>> > Thanks,
>>>> >>> > Andy
>>>> >>> >
>>>> >>>
>>>> >>
>>>> >>
>>>>
>>>>
>>>>
>>>> --
>>>> Twitter: @serverascode
>>>> Blog: serverascode.com
>>>>
>>
>>
>>
>> --
>> Twitter: @serverascode
>> Blog: serverascode.com
>
>
>
> --
> Aaron Peeler
> Program Manager
> Virtual Computing Lab
> NC State University
>
> All electronic mail messages in connection with State business which
> are sent to or received by this account are subject to the NC Public
> Records Law and may be disclosed to third parties.



-- 
Twitter: @serverascode
Blog: serverascode.com

Reply via email to