Mohammed Morsi
2009-Jun-23 20:00 UTC
[Ovirt-devel] [PATCH server] added ovirt-wait4service and invokation in installer to wait for psql/ldap
FIXME this patch isn't complete, still need to figure out the ldap command to wait for that service, something along the lines of: ldapsearch -b dc=priv,dc=ovirt,dc=org -x (but how will we parse the base from the installer? also this cmd fails, how to fix?) --- installer/modules/ovirt/manifests/ovirt.pp | 8 +++++- installer/modules/ovirt/manifests/postgres.pp | 13 ++++++--- ovirt-server.spec.in | 2 + scripts/ovirt-wait4service | 34 +++++++++++++++++++++++++ 4 files changed, 52 insertions(+), 5 deletions(-) create mode 100755 scripts/ovirt-wait4service diff --git a/installer/modules/ovirt/manifests/ovirt.pp b/installer/modules/ovirt/manifests/ovirt.pp index d953ebe..f293375 100644 --- a/installer/modules/ovirt/manifests/ovirt.pp +++ b/installer/modules/ovirt/manifests/ovirt.pp @@ -111,9 +111,15 @@ class ovirt::setup { single_exec { "create_ovirtadmin_acct" : command => "/usr/share/ovirt-server/script/grant_admin_privileges ovirtadmin", - require => [Single_Exec[db_migrate],Single_exec[set_ldap_hostname],Single_exec[set_ldap_dn]] + require => [Single_Exec[db_migrate],Single_exec[wait_for_ldap]] } + single_exec { "wait_for_ldap" : + command => "/usr/bin/ovirt-wait4service 'true' 10 2", + require => [Single_exec[set_ldap_hostname],Single_exec[set_ldap_dn]] + } + + single_exec { "set_ldap_hostname" : command => "/bin/sed -i -e 's/management.priv.ovirt.org/$ipa_host/' /usr/share/ovirt-server/config/ldap.yml", require => Package[ovirt-server] diff --git a/installer/modules/ovirt/manifests/postgres.pp b/installer/modules/ovirt/manifests/postgres.pp index c46b360..9a4afa1 100644 --- a/installer/modules/ovirt/manifests/postgres.pp +++ b/installer/modules/ovirt/manifests/postgres.pp @@ -45,14 +45,19 @@ class postgres::bundled{ hasstatus => true } + single_exec { "wait_for_postgres" : + command => "/usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2", + require => Service[postgresql] + } + single_exec {"create_ovirt_db": command => "/usr/bin/createdb ovirt -U postgres", - require => [Exec[postgres_add_all_trust], Service[postgresql]] + require => [Exec[postgres_add_all_trust], Single_exec[wait_for_postgres]] } single_exec {"create_ovirt_development_db": command => "/usr/bin/createdb ovirt_development -U postgres", - require => [Exec[postgres_add_all_trust], Service[postgresql]] + require => [Exec[postgres_add_all_trust], Single_exec[wait_for_postgres]] } postgres_execute_command {"ovirt_db_create_role": @@ -70,13 +75,13 @@ class postgres::bundled{ exec {"postgres_add_all_trust": command => "/bin/echo 'local all all trust' > /var/lib/pgsql/data/pg_hba.conf", require => Single_exec[initialize_db], - notify => Service[postgresql] + notify => Single_exec[wait_for_postgres] } exec {"postgres_add_localhost_trust": command => "/bin/echo 'host all all 127.0.0.1 255.255.255.0 trust' >> /var/lib/pgsql/data/pg_hba.conf", require => Exec[postgres_add_all_trust], - notify => Service[postgresql] + notify => Single_exec[wait_for_postgres] } file { "/etc/ovirt-server/" : diff --git a/ovirt-server.spec.in b/ovirt-server.spec.in index 1569a9a..eff1f2f 100644 --- a/ovirt-server.spec.in +++ b/ovirt-server.spec.in @@ -132,6 +132,7 @@ touch %{buildroot}%{_localstatedir}/log/%{name}/db-omatic.log %{__cp} -a %{pbuild}/scripts/ovirt-add-host %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-vm2node %{buildroot}%{_bindir} +%{__cp} -a %{pbuild}/scripts/ovirt-wait4service %{buildroot}%{_bindir} %{__cp} -a %{pbuild}/scripts/ovirt-reindex-search %{buildroot}%{_sbindir} %{__cp} -a %{pbuild}/scripts/ovirt-update-search %{buildroot}%{_sbindir} %{__rm} -rf %{buildroot}%{app_root}/tmp @@ -205,6 +206,7 @@ fi %{_sbindir}/ovirt-update-search %{_bindir}/ovirt-add-host %{_bindir}/ovirt-vm2node +%{_bindir}/ovirt-wait4service %{_initrddir}/ovirt-host-browser %{_initrddir}/ovirt-db-omatic %{_initrddir}/ovirt-host-collect diff --git a/scripts/ovirt-wait4service b/scripts/ovirt-wait4service new file mode 100755 index 0000000..65dbe2a --- /dev/null +++ b/scripts/ovirt-wait4service @@ -0,0 +1,34 @@ +#!/bin/sh +# ovirt-wait4service +# run a command a specified number times or until succesful, +# sleeping a specified number of seconds between tries + +testcmd=$1; shift +n_retries=$1; shift +sleep_seconds=$1; shift +total=$((n_retries*sleep_seconds)) + +print_usage(){ + echo "ovirt-wait4service test_command number_of_retries seconds_between_retries" +} + +if [ "$testcmd" == "" -o \ + "$sleep_seconds" == "" -o \ + "$n_retries" == "" ]; then + print_usage + exit 1 +fi + +echo "running command $testcmd $n_retries times or until succesful, sleeping $sleep_seconds seconds between tries" + +while [ $n_retries -gt 0 ] +do +echo $n_retries + eval "$testcmd" > /dev/null 2>&1 && exit 0 + echo service not ready yet, retrying... + n_retries=$((n_retries-1)) + sleep $sleep_seconds +done + +printf 'service not ready after %d seconds, giving up\n' $total 1>&2 +exit 1 -- 1.6.0.6
Mohammed Morsi
2009-Jun-23 20:34 UTC
[Ovirt-devel] Re: [PATCH server] added ovirt-wait4service and invokation in installer to wait for psql/ldap
Unfortunately the build failed for the same reason, eg postgres isn't available, with the patch applied. http://llama.virt.bos/builder-old/ovirt/06-23-2009_15:52/module-ovirt-server.html Interestingly the wait_for_postgres bit fails: [0;37mdebug: //postgres::bundled/Single_exec[wait_for_postgres]: Changing returns [0;37mdebug: //postgres::bundled/Single_exec[wait_for_postgres]: 1 change(s) [0;37mdebug: //postgres::bundled/Single_exec[wait_for_postgres]: Executing '/usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2' [0;37mdebug: Executing '/usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2' [1;35merr: //postgres::bundled/Single_exec[wait_for_postgres]/returns: change from notrun to 0 failed: /usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2 returned 1 instead of 0 at /usr/share/ace/modules/ovirt/manifests/postgres.pp:51 [0;36mnotice: //postgres::bundled/Single_exec[wait_for_postgres]: Triggering 'refresh' from 2 dependencies [0;37mdebug: //postgres::bundled/Single_exec[wait_for_postgres]: Executing '/usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2' [0;37mdebug: Executing '/usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2' [1;35merr: //postgres::bundled/Single_exec[wait_for_postgres]: Failed to call refresh on Single_exec[wait_for_postgres]: /usr/bin/ovirt-wait4service 'psql -l -U postgres' 10 2 returned 1 instead of 0 at /usr/share/ace/modules/ovirt/manifests/postgres.pp:51 [0;36mnotice: //postgres::bundled/Single_exec[create_ovirt_development_db]: Dependency single_exec[wait_for_postgres] has 1 failures [0;33mwarning: //postgres::bundled/Single_exec[create_ovirt_development_db]: Skipping because of failed dependencies [0;36mnotice: //postgres::bundled/Single_exec[create_ovirt_db]: Dependency single_exec[wait_for_postgres] has 1 failures [0;33mwarning: //postgres::bundled/Single_exec[create_ovirt_db]: Skipping because of failed dependencies Any thoughts? -Mo
Possibly Parallel Threads
- [PATCH server] update installer exec items to single_exec where applicable
- [PATCH server] add ipv6 postgres trust
- [PATCH server] add postgres permissions requires prior to starting service
- [PATCH server] add server-side groundwork for remote freeipa server
- [PATCH][ovirt-server] restart ipa after installation and before set admin password