Issue #18266 has been updated by Peter Meier. Status changed from Unreviewed to Duplicate
is a dup of #17286 ---------------------------------------- Bug #18266: init provider fails to manage (ensure => stopped) a service which init script does not exist anymore https://projects.puppetlabs.com/issues/18266#change-79393 Author: Peter Meier Status: Duplicate Priority: Normal Assignee: Category: service Target version: Affected Puppet version: 3.0.1 Keywords: debian, service, init, provider Branch: On a debian stable system: <pre> # lsb_release -a No LSB modules are available. Distributor ID: Debian Description: Debian GNU/Linux 6.0.6 (squeeze) Release: 6.0.6 Codename: squeeze </pre> Trying to ensure that a service is stopped (and later package to be removed) fails on subsequent runs, when the service is already stopped and gone. The problem is that the init provider tries to find an init-script which isn't there anymore => fails to determine status. <pre> # cat test.pp service{'sendmail': ensure => stopped, enable => false, hasstatus => true, } # puppet apply --debug test.pp debug: Puppet::Type::Service::ProviderRedhat: file /sbin/service does not exist debug: Puppet::Type::Service::ProviderLaunchd: file /bin/launchctl does not exist debug: Puppet::Type::Service::ProviderRunit: file /usr/bin/sv does not exist debug: Puppet::Type::Service::ProviderGentoo: file /sbin/rc-update does not exist debug: Puppet::Type::Service::ProviderDaemontools: file /usr/bin/svstat does not exist debug: Creating default schedules debug: Failed to load library 'selinux' for feature 'selinux' debug: Puppet::Type::User::ProviderPw: file pw does not exist debug: Puppet::Type::User::ProviderLdap: true value when expecting false debug: Puppet::Type::User::ProviderDirectoryservice: file /usr/bin/dscl does not exist debug: Puppet::Type::User::ProviderUser_role_add: file rolemod does not exist debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows is missing debug: Failed to load library 'ldap' for feature 'ldap' debug: /File[/var/lib/puppet/ssl/private]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/ssl/public_keys/tramp.glei.ch.pem]: Autorequiring File[/var/lib/puppet/ssl/public_keys] debug: /File[/var/lib/puppet/ssl/public_keys]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/lib]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/ssl/private_keys]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/ssl/crl.pem]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/client_yaml]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/ssl/certs]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/ssl/private_keys/tramp.glei.ch.pem]: Autorequiring File[/var/lib/puppet/ssl/private_keys] debug: /File[/var/lib/puppet/state/last_run_summary.yaml]: Autorequiring File[/var/lib/puppet/state] debug: /File[/var/lib/puppet/facts]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/state]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/state/graphs]: Autorequiring File[/var/lib/puppet/state] debug: /File[/var/lib/puppet/state/state.yaml]: Autorequiring File[/var/lib/puppet/state] debug: /File[/var/lib/puppet/client_data]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/state/classes.txt]: Autorequiring File[/var/lib/puppet/state] debug: /File[/var/lib/puppet/ssl/certificate_requests]: Autorequiring File[/var/lib/puppet/ssl] debug: /File[/var/lib/puppet/ssl]: Autorequiring File[/var/lib/puppet] debug: /File[/var/lib/puppet/ssl/certs/tramp.glei.ch.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] debug: /File[/var/lib/puppet/state/last_run_report.yaml]: Autorequiring File[/var/lib/puppet/state] debug: /File[/var/lib/puppet/ssl/certs/ca.pem]: Autorequiring File[/var/lib/puppet/ssl/certs] debug: /File[/var/lib/puppet/clientbucket]: Autorequiring File[/var/lib/puppet] debug: Finishing transaction -614010188 debug: Loaded state in 0.77 seconds debug: Loaded state in 0.77 seconds info: Applying configuration version '1356345789' debug: Service[sendmail](provider=debian): Could not find sendmail in /etc/init.d debug: Service[sendmail](provider=debian): Could not find sendmail.sh in /etc/init.d /usr/lib/ruby/1.8/puppet/provider/service/init.rb:116:in `search' /usr/lib/ruby/1.8/puppet/provider/service/init.rb:70:in `initscript' /usr/lib/ruby/1.8/puppet/provider/service/init.rb:137:in `statuscmd' /usr/lib/ruby/1.8/puppet/provider/service/base.rb:58:in `status' /usr/lib/ruby/1.8/puppet/type/service.rb:73:in `retrieve' /usr/lib/ruby/1.8/puppet/type.rb:685:in `retrieve' /usr/lib/ruby/1.8/puppet/type.rb:703:in `retrieve_resource' /usr/lib/ruby/1.8/puppet/transaction/resource_harness.rb:32:in `perform_changes' /usr/lib/ruby/1.8/puppet/transaction/resource_harness.rb:133:in `evaluate' /usr/lib/ruby/1.8/puppet/transaction.rb:48:in `apply' /usr/lib/ruby/1.8/puppet/transaction.rb:113:in `eval_children_and_apply_resource' /usr/lib/ruby/1.8/puppet/transaction.rb:91:in `eval_resource' /usr/lib/ruby/1.8/puppet/transaction.rb:138:in `evaluate' /usr/lib/ruby/1.8/puppet/util.rb:403:in `thinmark' /usr/lib/ruby/1.8/benchmark.rb:308:in `realtime' /usr/lib/ruby/1.8/puppet/util.rb:402:in `thinmark' /usr/lib/ruby/1.8/puppet/transaction.rb:137:in `evaluate' /usr/lib/ruby/1.8/puppet/transaction.rb:130:in `each' /usr/lib/ruby/1.8/puppet/transaction.rb:130:in `evaluate' /usr/lib/ruby/1.8/puppet/resource/catalog.rb:150:in `apply' /usr/lib/ruby/1.8/puppet/configurer.rb:120:in `retrieve_and_apply_catalog' /usr/lib/ruby/1.8/puppet/util.rb:178:in `benchmark' /usr/lib/ruby/1.8/benchmark.rb:308:in `realtime' /usr/lib/ruby/1.8/puppet/util.rb:177:in `benchmark' /usr/lib/ruby/1.8/puppet/configurer.rb:119:in `retrieve_and_apply_catalog' /usr/lib/ruby/1.8/puppet/configurer.rb:150:in `run' /usr/lib/ruby/1.8/puppet/application/apply.rb:131:in `main' /usr/lib/ruby/1.8/puppet/application/apply.rb:35:in `run_command' /usr/lib/ruby/1.8/puppet/application.rb:305:in `run' /usr/lib/ruby/1.8/puppet/application.rb:420:in `hook' /usr/lib/ruby/1.8/puppet/application.rb:305:in `run' /usr/lib/ruby/1.8/puppet/application.rb:411:in `exit_on_fail' /usr/lib/ruby/1.8/puppet/application.rb:305:in `run' /usr/lib/ruby/1.8/puppet/util/command_line.rb:62:in `execute' /usr/bin/puppet:4 err: /Stage[main]//Service[sendmail]: Could not evaluate: Could not find init script for 'sendmail' debug: Finishing transaction -614580918 debug: Storing state debug: Stored state in 3.25 seconds notice: Finished catalog run in 4.10 seconds </pre> While I see the general problem, that if hasstatus is set to true and the init-script is missing we can't determine the current status, it still requires to handle disabling a service different, as I need to set (hasstatus => false) for service that should be removed. Afaik the redhat provider doesn't call the init script directly, it rathers calls `service sendmail stop` which fails if the service is not anymore present, so we "safely" assume that the service isn't running anymore. -> No error is raised. The behavior I would like to see is, that if I want to stop a service with the init provider and hasstatus is set to ture and there is no init.d script for it, it should be assumed to be stopped. While in general the init provider still assumes, that there is not status command on init scripts, things have changed in the past few years and many got one. However, the init provider is still default on debian and hence it can become tricky to deal with legacy issues of the init provider. -- You have received this notification because you have either subscribed to it, or are involved in it. To change your notification preferences, please click here: http://projects.puppetlabs.com/my/account -- You received this message because you are subscribed to the Google Groups "Puppet Bugs" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/puppet-bugs?hl=en.
