Issue #3186 has been updated by Dan Bode.

yes, explicitly adding the require => Class[mysql::server] stuff fixes this 
issue. (orders things correctly, things work)

Although the resolving stuff looks suspicious its def not the root cause, that 
error only occurs if mysql has not been installed before the type is used (I 
have been hacking around with this loading/order stuff). In the same manifest, 
I found more places where require class isnt creating the dependencies.

also, this is when using the puppet executable (not sure if that should 
matter), I havent had a change to check it with puppetd.
----------------------------------------
Bug #3186: require not working as expected
http://projects.reductivelabs.com/issues/3186

Author: Dan Bode
Status: Accepted
Priority: Normal
Assigned to: Brice Figureau
Category: functions
Target version: 
Affected version: 0.25.4
Keywords: require order
Branch: 


I have an example where require is not correctly specifying a dependency 
between classes.

<pre>
$mysql_old_pw='b'
$mysql_root_pw='p'
$redmine_db='r'
$redmine_db_user='red'
$redmine_db_pw='red'
include redmine::mysql
</pre>

<pre>
class redmine::mysql {
  require mysql::server
  require mysql::ruby
  if ! $redmine_db {
    fail('$redmine_db parameter is required')
  }
  if ! $redmine_db_user {
    fail('$redmine_db_user parameter is required')
  }
  if ! $redmine_db_pw {
    fail('$redmine_db_pw parameter is required')
  }
  database{$redmine_db:
    ensure   => present,
    charset  => 'utf8',
    provider => 'mysql',
  }
  database_user{"${redmine_db_us...@localhost":
    ensure        => present,
    password_hash => mysql_password($redmine_db_pw),
    require       => Database[$redmine_db],
    provider      => 'mysql',
  }
  database_grant{"${redmine_...@localhost/${redmine_db}":
#    privileges => [ 'alter_priv', 'insert_priv', 'select_priv', 'update_priv' 
],
    provider   => 'mysql',
    privileges => all,
  }
}
</pre>

<pre>
class mysql::server {
  # set the mysql root password
  if(! $mysql_root_pw) {
    fail('$mysql_root_pw must be set for class mysql::server')
  }
  package{'mysql-server':
    name   => 'mysql-server',
    ensure => installed,
    notify => Service['mysqld'],
  }
.....
#more code here
</pre>

the require statement should order all of the resources in mysql::server before 
everything in redmine::mysql, but the Database resource is applied before the 
mysql-server package is installed (see output below).

<pre>
r...@ubuntu:/usr/local/dev/modules/infrastructure/modules/redmine/tests# puppet 
mysql.pp --noop
notice: //mysql::ruby/Package[ruby-mysql]/ensure: is absent, should be present 
(noop)
err: //redmine::mysql/Database[redmine]: Failed to retrieve current state of 
resource: Provider mysql is not functional on this platform
notice: //redmine::mysql/database_user[redm...@localhost]: Dependency 
database[redmine] has 1 failures
warning: //redmine::mysql/database_user[redm...@localhost]: Skipping because of 
failed dependencies
notice: //redmine::mysql/database_grant[redm...@localhost/redmine]: Dependency 
database[redmine] has 1 failures
warning: //redmine::mysql/database_grant[redm...@localhost/redmine]: Skipping 
because of failed dependencies
notice: //mysql::server/Package[mysql-server]/ensure: is purged, should be 
present (noop)
notice: //mysql::server/Service[mysqld]/enable: is false, should be true (noop)
notice: //mysql::server/Service[mysqld]: Would have triggered refresh from 1 
dependencies
err: //mysql::server/Exec[set_mysql_rootpw]: Failed to retrieve current state 
of resource: 
notice: //mysql::server/File[/root/.my.cnf]: Dependency exec[mysqladmin -u root 
-pblah password password] has 1 failures
warning: //mysql::server/File[/root/.my.cnf]: Skipping because of failed 
dependencies
notice: //mysql::server/File[/etc/my.cnf]/ensure: is absent, should be file 
(noop)
notice: //mysql::server/Service[mysqld-restart]: Dependency exec[mysqladmin -u 
root -pblah password password] has 1 failures
warning: //mysql::server/Service[mysqld-restart]: Skipping because of failed 
dependencies
notice: //mysql::server/Service[mysqld-restart]: Would have triggered refresh 
from 1 dependencies
</pre>

I can work around by specifying require=>Class['mysql::server'] for the 
resources that care about order, but I would rather use require.


-- 
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://reductivelabs.com/redmine/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.

Reply via email to