Perry Myers
2008-Nov-14 09:07 UTC
[Ovirt-devel] [PATCH recipe] Split ovirt-appliance init script into storage and dnsmasq
This makes the appliance a little more deterministic in setup. DNS services must be working correctly prior to calling the ovirt-server-appliance-setup script, but storage can't be activated until after. Splitting up these two services allows us to set up the dependencies properly in the puppet file. This fixes a transient bug where the appliance would start but the services would fail to configure properly. I was seeing this around 25% of the time with appliance firstboot. Signed-off-by: Perry Myers <pmyers at redhat.com> --- Makefile.am | 3 +- appliances/ovirt/files/ovirt-dnsmasq.conf | 25 ++++++ appliances/ovirt/files/ovirt-server-appliance | 87 -------------------- appliances/ovirt/files/ovirt-storage | 72 ++++++++++++++++ appliances/ovirt/ovirt.pp.in | 31 +++++-- .../templates/ovirt-server-appliance-setup.erb | 16 ++++ 6 files changed, 137 insertions(+), 97 deletions(-) create mode 100644 appliances/ovirt/files/ovirt-dnsmasq.conf delete mode 100644 appliances/ovirt/files/ovirt-server-appliance create mode 100644 appliances/ovirt/files/ovirt-storage diff --git a/Makefile.am b/Makefile.am index 4f7f939..2505208 100644 --- a/Makefile.am +++ b/Makefile.am @@ -30,7 +30,8 @@ EXTRA_DIST = \ appliances/ovirt/files/qpidd.conf \ appliances/ovirt/files/ovirt-cfgdb \ appliances/ovirt/files/ovirt.repo \ - appliances/ovirt/files/ovirt-server-appliance \ + appliances/ovirt/files/ovirt-dnsmasq.conf \ + appliances/ovirt/files/ovirt-storage \ appliances/ovirt/files/ovirt-splash.xpm.gz \ appliances/ovirt/templates/ovirt-server-appliance-setup.erb \ appliances/ovirt/templates/terminal.erb diff --git a/appliances/ovirt/files/ovirt-dnsmasq.conf b/appliances/ovirt/files/ovirt-dnsmasq.conf new file mode 100644 index 0000000..716ccd4 --- /dev/null +++ b/appliances/ovirt/files/ovirt-dnsmasq.conf @@ -0,0 +1,25 @@ +interface=eth1 +dhcp-range=192.168.50.6,192.168.50.252 +dhcp-host=00:16:3e:12:34:57,192.168.50.3 +dhcp-host=00:16:3e:12:34:58,192.168.50.4 +dhcp-host=00:16:3e:12:34:59,192.168.50.5 +domain=priv.ovirt.org +srv-host=_ovirt._tcp,management.priv.ovirt.org,80 +srv-host=_ipa._tcp,management.priv.ovirt.org,80 +srv-host=_ldap._tcp,management.priv.ovirt.org,389 +srv-host=_collectd._tcp,management.priv.ovirt.org,25826 +srv-host=_qpidd._tcp,management.priv.ovirt.org,5672 +srv-host=_identify._tcp,management.priv.ovirt.org,12120 +enable-tftp +tftp-root=/var/lib/tftpboot +dhcp-boot=pxelinux.0 +dhcp-option=option:router,192.168.50.2 +dhcp-option=option:ntp-server,192.168.50.2 +dhcp-option=12 +no-resolv +local=/priv.ovirt.org/ +server=192.168.122.1 + + + + diff --git a/appliances/ovirt/files/ovirt-server-appliance b/appliances/ovirt/files/ovirt-server-appliance deleted file mode 100644 index 5cf530d..0000000 --- a/appliances/ovirt/files/ovirt-server-appliance +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/bash -# -# ovirt-server-appliance oVirt Server Appliance service -# -# chkconfig: 3 96 4 -# description: ovirt server appliance service -# - -# Source functions library -. /etc/init.d/functions -TARGET_ID=32101 - -start() { - echo -n "Starting ovirt-server-appliance: " - dnsmasq -i eth1 -F 192.168.50.6,192.168.50.252 \ - -G 00:16:3e:12:34:57,192.168.50.3 -G 00:16:3e:12:34:58,192.168.50.4 \ - -G 00:16:3e:12:34:59,192.168.50.5 \ - -s priv.ovirt.org \ - -W _ovirt._tcp,management.priv.ovirt.org,80 \ - -W _ipa._tcp,management.priv.ovirt.org,80 \ - -W _ldap._tcp,management.priv.ovirt.org,389 \ - -W _collectd._tcp,management.priv.ovirt.org,25826 \ - -W _qpidd._tcp,management.priv.ovirt.org,5672 \ - -W _identify._tcp,management.priv.ovirt.org,12120 \ - --enable-tftp --tftp-root=/var/lib/tftpboot -M pxelinux.0 \ - -O option:router,192.168.50.2 -O option:ntp-server,192.168.50.2 \ - --dhcp-option=12 \ - -R --local /priv.ovirt.org/ --server 192.168.122.1 - - # Set up the fake iscsi target - tgtadm --lld iscsi --op new --mode target --tid $TARGET_ID \ - -T ovirtpriv:storage - - # - # Now associate them to the LVs - # - tgtadm --lld iscsi --op new --mode logicalunit --tid $TARGET_ID \ - --lun 1 -b /ovirtiscsi/iSCSI3 - tgtadm --lld iscsi --op new --mode logicalunit --tid $TARGET_ID \ - --lun 2 -b /ovirtiscsi/iSCSI4 - tgtadm --lld iscsi --op new --mode logicalunit --tid $TARGET_ID \ - --lun 3 -b /ovirtiscsi/iSCSI5 - - # - # Now make them available - # - tgtadm --lld iscsi --op bind --mode target --tid $TARGET_ID -I ALL - - echo_success - echo -} - -stop() { - echo -n "Stopping ovirt-server-appliance: " - - # stop access to the iscsi target - tgtadm --lld iscsi --op unbind --mode target --tid $TARGET_ID -I ALL - - # unbind the LUNs - tgtadm --lld iscsi --op delete --mode logicalunit --tid $TARGET_ID --lun 3 - tgtadm --lld iscsi --op delete --mode logicalunit --tid $TARGET_ID --lun 2 - tgtadm --lld iscsi --op delete --mode logicalunit --tid $TARGET_ID --lun 1 - - # shutdown the target - tgtadm --lld iscsi --op delete --mode target --tid $TARGET_ID - - kill $(cat /var/run/dnsmasq.pid) - - echo_success - echo -} - -case "$1" in - start) - start - ;; - stop) - stop - ;; - restart) - stop - start - ;; - *) - echo "Usage: ovirt-server-appliance {start|stop|restart}" - exit 2 -esac diff --git a/appliances/ovirt/files/ovirt-storage b/appliances/ovirt/files/ovirt-storage new file mode 100644 index 0000000..2679995 --- /dev/null +++ b/appliances/ovirt/files/ovirt-storage @@ -0,0 +1,72 @@ +#!/bin/bash +# +# ovirt-storage Set up storage for oVirt Server Appliance +# +# chkconfig: 3 96 4 +# description: oVirt Appliance Storage Services +# + +# Source functions library +. /etc/init.d/functions +TARGET_ID=32101 + +prog="ovirt-storage" +num_iscsi_luns=5 + +start() { + echo -n "Starting $prog: " + + # Set up the fake iscsi target + tgtadm --lld iscsi --op new --mode target --tid $TARGET_ID \ + -T ovirtpriv:storage + + # + # Now associate them to the LVs + # + for i in `seq 1 $num_iscsi_luns` ; do + tgtadm --lld iscsi --op new --mode logicalunit --tid $TARGET_ID \ + --lun $i -b /ovirtiscsi/iSCSI$i + done + + # + # Now make them available + # + tgtadm --lld iscsi --op bind --mode target --tid $TARGET_ID -I ALL + + echo_success + echo +} + +stop() { + echo -n "Stopping $prog: " + + # stop access to the iscsi target + tgtadm --lld iscsi --op unbind --mode target --tid $TARGET_ID -I ALL + + # unbind the LUNs + for i in `seq 1 $num_iscsi_luns` ; do + tgtadm --lld iscsi --op delete --mode logicalunit --tid $TARGET_ID --lun $i + done + + # shutdown the target + tgtadm --lld iscsi --op delete --mode target --tid $TARGET_ID + + echo_success + echo +} + +case "$1" in + start) + start + ;; + stop) + stop + ;; + restart) + stop + start + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 2 +esac diff --git a/appliances/ovirt/ovirt.pp.in b/appliances/ovirt/ovirt.pp.in index 9ac4c12..70ca04b 100644 --- a/appliances/ovirt/ovirt.pp.in +++ b/appliances/ovirt/ovirt.pp.in @@ -153,6 +153,18 @@ service {"qpidd": enable => true } +file {"/etc/dnsmasq.d/ovirt-dnsmasq.conf": + source => "puppet:///ovirt/ovirt-dnsmasq.conf", + mode => 644 +} + +service {"dnsmasq": + ensure => "running", + enable => true , + require => [File["/etc/dnsmasq.d/ovirt-dnsmasq.conf"], + Service["network"]] +} + file {"/usr/sbin/ovirt-server-appliance-setup": content => template("ovirt-server-appliance-setup.erb"), mode => 755 @@ -161,7 +173,8 @@ file {"/usr/sbin/ovirt-server-appliance-setup": single_exec {"ovirt_appliance_installation": command => "/usr/sbin/ovirt-server-appliance-setup >> /var/log/ovirt-server-appliance-setup.log 2>&1", require => [File["/usr/sbin/ovirt-server-appliance-setup"], - Exec["reload-firewall"],Augeas["network_scripts"]] + Exec["reload-firewall"],Augeas["network_scripts"], + Service["dnsmasq"]] } file {"/usr/sbin/cobbler-import": @@ -188,23 +201,23 @@ single_exec {"cobbler-import": Single_exec["ovirt_appliance_installation"]] } -file {"/etc/init.d/ovirt-server-appliance": - source => "puppet:///ovirt/ovirt-server-appliance", +file {"/etc/init.d/ovirt-storage": + source => "puppet:///ovirt/ovirt-storage", mode => 755 } -service {"ovirt-server-appliance": +service {"ovirt-storage": ensure => "running", enable => true , - require => [File["/etc/init.d/ovirt-server-appliance"], - Service["network"], Service["httpd"], - Single_exec["ovirt_appliance_installation"], - Single_exec["cobbler-import"]] + require => [File["/etc/init.d/ovirt-storage"], + Service["network"], + Single_exec["ovirt_appliance_installation"]] } single_exec {"ovirt_installation": command => "/usr/sbin/ovirt-server-install >> /var/log/ovirt-server-install.log 2>&1", - require => [Service["postgresql"],Service["ovirt-server-appliance"]] + require => [Service["postgresql"],Service["ovirt-storage"],Service["dnsmasq"], + Single_exec["ovirt_appliance_installation"],Single_exec["cobbler-import"]] } diff --git a/appliances/ovirt/templates/ovirt-server-appliance-setup.erb b/appliances/ovirt/templates/ovirt-server-appliance-setup.erb index 93cb2e5..bc542d6 100644 --- a/appliances/ovirt/templates/ovirt-server-appliance-setup.erb +++ b/appliances/ovirt/templates/ovirt-server-appliance-setup.erb @@ -1,15 +1,28 @@ #!/bin/bash export PATH=/usr/kerberos/bin:$PATH +set -x +set -e + # make sure to update the /etc/hosts with the list of all possible DHCP # addresses we can hand out; dnsmasq uses this sed -i -e 's/management\.priv\.ovirt\.org//' /etc/hosts +sed -i -e 's/management//' /etc/hosts echo "192.168.50.1 physical.priv.ovirt.org" >> /etc/hosts echo "192.168.50.2 management.priv.ovirt.org" >> /etc/hosts for i in `seq 3 252` ; do echo "192.168.50.$i node$i.priv.ovirt.org" >> /etc/hosts done +service dnsmasq reload + +# FIXME: This is a temporary fix to correct a problem in the puppet config +# dependencies. Sometimes the network will not get restarted with the right +# DNS server until after this script runs, which causes the IPA setup to fail. +# Once we remove the need for dhcp from the client (by only having a single +# interface with 50.2 as the address) this hack will go away +echo "nameserver 192.168.50.2" > /etc/resolv.conf + # workaround for https://bugzilla.redhat.com/show_bug.cgi?id=451936 sed -i '/\[kdcdefaults\]/a \ kdc_ports = 88' /usr/share/ipa/kdc.conf.template # set up freeipa @@ -81,3 +94,6 @@ echo "/cobblernfs 192.168.50.0/24(rw,no_root_squash)" >> /etc/exports # Turn off ace on appliance restarts until we make the installation scripts # reentrant chkconfig ace off + +set +x +set +e -- 1.6.0.3
Hugh O. Brock
2008-Nov-14 14:30 UTC
[Ovirt-devel] [PATCH recipe] Split ovirt-appliance init script into storage and dnsmasq
On Fri, Nov 14, 2008 at 04:07:27AM -0500, Perry Myers wrote:> This makes the appliance a little more deterministic in setup. > DNS services must be working correctly prior to calling the > ovirt-server-appliance-setup script, but storage can't be activated > until after. Splitting up these two services allows us to set up > the dependencies properly in the puppet file. > > This fixes a transient bug where the appliance would start but > the services would fail to configure properly. I was seeing > this around 25% of the time with appliance firstboot. > > Signed-off-by: Perry Myers <pmyers at redhat.com>Ahhhh is this why people's appliances were randomly failing to set up? --Hugh
Scott Seago
2008-Nov-14 17:03 UTC
[Ovirt-devel] [PATCH recipe] Split ovirt-appliance init script into storage and dnsmasq
Perry Myers wrote:> This makes the appliance a little more deterministic in setup. > DNS services must be working correctly prior to calling the > ovirt-server-appliance-setup script, but storage can't be activated > until after. Splitting up these two services allows us to set up > the dependencies properly in the puppet file. > > This fixes a transient bug where the appliance would start but > the services would fail to configure properly. I was seeing > this around 25% of the time with appliance firstboot. > > Signed-off-by: Perry Myers <pmyers at redhat.com> > --- > Makefile.am | 3 +- > appliances/ovirt/files/ovirt-dnsmasq.conf | 25 ++++++ > appliances/ovirt/files/ovirt-server-appliance | 87 -------------------- > appliances/ovirt/files/ovirt-storage | 72 ++++++++++++++++ > appliances/ovirt/ovirt.pp.in | 31 +++++-- > .../templates/ovirt-server-appliance-setup.erb | 16 ++++ > 6 files changed, 137 insertions(+), 97 deletions(-) > create mode 100644 appliances/ovirt/files/ovirt-dnsmasq.conf > delete mode 100644 appliances/ovirt/files/ovirt-server-appliance > create mode 100644 appliances/ovirt/files/ovirt-storage > >OK this works for me... Scott
Perry Myers
2008-Nov-14 21:55 UTC
[Ovirt-devel] Re: [PATCH recipe] Split ovirt-appliance init script into storage and dnsmasq
Perry Myers wrote:> This makes the appliance a little more deterministic in setup. > DNS services must be working correctly prior to calling the > ovirt-server-appliance-setup script, but storage can't be activated > until after. Splitting up these two services allows us to set up > the dependencies properly in the puppet file. > > This fixes a transient bug where the appliance would start but > the services would fail to configure properly. I was seeing > this around 25% of the time with appliance firstboot.This has been pushed. Perry