Your definition seems fine and sound (on a quick look), just replace
the part that is always the same (here being file { "/data01/
multi_mysql": ... }) with a virtual resource, and you're done
Greets,
Felix
Am 16.03.2009 um 16:48 schrieb TomTom:
>
> Hi Bruce,
> Thanks for the snappy reply.
> I need to create X number of mysql_X directories under /data01/
> multi_mysql/. Sometimes I might need to only create one instance,
> sometimes I might need to create as many as 10. How can I craft a
> flexible class that will create and install X number?
> For example
> /data01/multi_mysql/mysql_A
> /data01/multi_mysql/mysql_B
> /data01/multi_mysql/mysql_C
> /data01/multi_mysql/mysql_D
> /data01/multi_mysql/mysql_E
> /data01/multi_mysql/mysql_F
> /data01/multi_mysql/mysql_G
> /data01/multi_mysql/mysql_H
>
> Your suggestion for creating a class to do the file system creation is
> a good one, but how would I make it flexible to create mysql_X number
> of directories? I didn't think you could with a puppet class. That's
> why I went down the path of trying to call a function (definition)
> multiple times. More information on how you would implement a
> flexible puppet class would be greatly appreciated.
>
> Thank you very much for your help. Ill buy you a beer at the first
> puppet conference. :)
> -Tom
>
>
> On Mar 16, 11:33 am, Bruce Richardson <[email protected]> wrote:
>> On Mon, Mar 16, 2009 at 08:16:31AM -0700, TomTom wrote:
>>> Second of all, when I try to run the second mysql_B installation,
>>> puppet borks and says:
>>> puppetd[23415]: Could not retrieve configuration: Duplicate
>>> definition: File[/data01/multi_mysql] is already defined in file /
>>> etc/
>>> puppet/manifests/definitions/dba/mysql_instance.pp at line 76;
>>> cannot
>>> redefine at /etc/puppet/manifests/definitions/dba/
>>> mysql_instance.pp:76
>>
>>> I believe puppet is getting hung up on the "idempotency" (Not
>>> sure if
>>> I am using this word correctly)
>>> Puppet is seeing the file definition when the function is called to
>>> install the second instance, and is saying that the definition is
>>
>> By function I take it you mean "definition".
>>
>> Puppet only lets you define any resource once. If you have defined
>> File['/data_dir/multi_mysql'] once, you can't define it again, no
>> matter
>> how deeply buried it is within nested classes or definitions. Don't
>> panic one way to get around this is checking to see if the resource
>> has
>> already been defined and only creating it if not. So change your
>> mysql_install_definition to have some thing like this:
>>
>> if defined( File["/$data_dir/multi_mysql"] ) {
>> debug( "/$data_dir/multi_mysql already exists" )
>> } else {
>>
>> file { "/$data_dir/multi_mysql":
>> mode => 775, owner => "mysql", group =>
>> "sysadmin",
>> require => File [ "/$data_dir" ],
>> }
>> }
>>
>> Another way to do this would be to have a class that creates the
>> multi_mysql directory and have this definition include it. That
>> would
>> be more idiomatic puppetry, I think, because it sticks with the
>> convention of using classes for things of which there is only one.
>>
>> --
>> Bruce
>>
>> What would Edward Woodward do?
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Users" 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-users?hl=en
-~----------~----~----~----~------~----~------~--~---