Hi Nish,

I agree and i'd be happy to take any patches to clean stuff up.

Cheers!


On Fri, Apr 3, 2015 at 7:22 PM, Nishanth Aravamudan <n...@linux.vnet.ibm.com
> wrote:

> On 03.04.2015 [17:05:30 +0000], Britt Houser (bhouser) wrote:
> >
> >
> > On 4/3/15, 12:30 PM, "Nishanth Aravamudan" <n...@linux.vnet.ibm.com>
> wrote:
> >
> > >On 03.04.2015 [02:17:17 +0000], Britt Houser (bhouser) wrote:
> > >> I'm working on a RHEL7 docker container with cobbler in it.  I have
> > >>setup
> > >> cobbler in this container to manage dhcpd.
> > >
> > >It seems like you're not configuring the containers correctly. Cobbler
> > >should run in one container and dhcpd should run in another, right?
> > >
> > >Dare I ask why you're doing this? :)
> >
> > Right - not the container ideal, but I put the "why" further down.
> >
> > >
> > >>  One hurdle with this setup is that a cobbler sync needs to restart
> > >>  dhcpd, but a docker container has no systemd.  So what I've done to
> > >>  work around this is to edit
> > >>
> >
> >>/usr/lib/python2.7/site-packages/cobbler/modules/sync_post_restart_servic
> > >>es
> > >>  .py and change the dhcp_restart_command to call a simple shell
> > >>  script:
> > >>
> > >> --
> > >> #!/bin/sh
> > >>
> > >> #dhcpd writes its pid to /var/run/dhcpd.pid
> > >> #kill the PID in the file, if the file exists
> > >> if [ -f "/var/run/dhcpd.pid" ]
> > >> then
> > >>   kill `cat /var/run/dhcpd.pid`
> > >> fi
> > >>
> > >> #Start again using command line from
> > >>/usr/lib/systemd/system/dhcpd.service
> > >> /usr/sbin/dhcpd -cf /etc/dhcp/dhcpd.conf -user dhcpd -group dhcpd
> > >> --
> > >>
> > >> I do realize I'm not really supposed to have more than one process in
> a
> > >> container. But if I put dhcpd in its own container, the problem would
> > >>just
> > >> be even harder b/c now cobbler in its container needs to restart
> another
> > >> container.
> > >
> > >No, it just needs to restart (reload) that process. Meaning dhcpd needs
> > >either graceful reload, or, as you said, you need to be able to restart
> > >the DHCP process itself. Containerization isn't free :)
> >
> > So to my knowledge, ISC-DHCP doesn't have a "reload", you must kill and
> > then restart.  If DHCP is in its own container, killing the process means
> > killing the container.  Respawning the process means starting a new
> > container.  This in and of itself isn't hard, but invoking that from
> > within another container I think would be more difficult than keeping
> both
> > processes in the same container.
> >
> > >
> > >>  So I took the easier route and put them in the same container.
> > >> So in this implementation, it would be useful if I could specify a
> > >>custom
> > >> dhcp_restart_command in /etc/cobbler/settings.  Would that be a change
> > >>the
> > >> community would be interested in accepting?
> > >
> > >I think the right way is to provide another option to the
> > >
> > >[dhcp]
> > >module = manage_isc
> > >
> > >section of configuration, which is something like
> > >
> > >[dhcp]
> > >module = manage_local
> > >
> > >And configure that appropriately? I've done that, for instance, for
> > >having a local version of authentication.
> > >
> > >-Nish
> >
> > Can you elaborate on what you envision manage_local would do?  I'm not
> > quite following how this would work?  I still want cobbler to be
> > generating my dhcpd.conf file from template, I just want to change how
> > cobbler restarts dhcpd.
>
> Something like this:
>
> diff --git a/cobbler/action_sync.py b/cobbler/action_sync.py
> index 7a41ee2..d201ab6 100644
> --- a/cobbler/action_sync.py
> +++ b/cobbler/action_sync.py
> @@ -233,6 +233,14 @@ class CobblerSync:
>                          error_msg = "service dnsmasq restart failed"
>                          self.logger.error(error_msg)
>                          raise CX(error_msg)
> +            elif which_dhcp_module == "manage_local":
> +                if restart_dhcp != "0":
> +                    # call some external process
> +                    rc = utils.subprocess_call(self.logger,
> "your_script", shell=True)
> +                    if rc != 0:
> +                        error_msg = "script restart failed"
> +                        self.logger.error(error_msg)
> +                        raise CX(error_msg)
>
>      def clean_link_cache(self):
>          for dirtree in [os.path.join(self.bootloc, 'images'),
> self.settings.webdir]:
>
> It's sort of gross that cobbler has so specific knowledge of dhcpd in
> action_sync.py. In the interest of abstraction and cleaning the code,
> I'd suggest, pulling sync_dhcp() itself into the dhcp modules code
> (manage_isc, manage_dnsmasq). That is, make sync_dhcp() a member of
> self.dhcp objects in action_sync.py
>
> Then you'd just inherit in manage_local from manage_isc and override
> sync_dhcp.
>
> -Nish
>
> _______________________________________________
> cobbler-devel mailing list
> cobbler-devel@lists.fedorahosted.org
> https://lists.fedorahosted.org/mailman/listinfo/cobbler-devel
>



-- 
Grtz,
Jörgen Maas
_______________________________________________
cobbler-devel mailing list
cobbler-devel@lists.fedorahosted.org
https://lists.fedorahosted.org/mailman/listinfo/cobbler-devel

Reply via email to