2016-06-17 17 views
2

Puppet Anfänger zu verwenden, so vielleicht etwas mache ich falsch ...„Ungültige Ressourcentyp“ versucht hier Puppet des Defined Ressourcentyp

Ich habe ein Manifest, das die folgenden definieren

define amqconf (
    $activemq_home = '/opt/apache-activemq', 
    $group   = 'activemq', 
    $mode   = 0644, 
    $owner   = 'activemq', 
    $broker_name = $title, 
    $broker_port = 61616, 
) { 
    file { $title: 
     ensure => present, 
     path => "${activemq_home}/${broker_name}/conf/activemq.xml", 
     content => template('profiles/activemq.xml.erb'), 
    } 
} 

enthält und dann versucht, dass

$broker_conf = hiera('profiles::activemq::broker::conf') 
create_resources(amqconf, $broker_conf) 

aber wenn ich versuche, und benutzen Sie diese Klasse bekomme ich folgende Fehler

zu verwenden, definieren
Info: Using configured environment 'testing' 
Info: Retrieving pluginfacts 
Info: Retrieving plugin 
Info: Loading facts 
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Evaluation Error: Error while evaluating a Resource Statement, Evaluation Error: Error while evaluating a Function Call, Puppet::Parser::AST::Resource failed with error ArgumentError: Invalid resource type amqconf at /etc/puppetlabs/code/environments/testing/modules/profiles/manifests/activemq.pp:73:5 on node cust-stage.internal 
Warning: Not using cache on failed catalog 
Error: Could not retrieve catalog; skipping run 

Was muss ich tun, um diese Definition verwenden zu können?

EDIT: hinzugefügt komplettes Manifest

class profiles::activemq { 

    include archive 
    include profiles::java_7_oracle 

    $activemq_version = '5.13.3' 

    define amqconf (
     $activemq_home = '/opt/apache-activemq', 
     $group   = 'activemq', 
     $mode   = 0644, 
     $owner   = 'activemq', 
     $broker_name = $title, 
     $broker_port = 61616, 
    ) { 
     file { $title: 
      ensure => present, 
      path => "${activemq_home}/${broker_name}/conf/activemq.xml", 
      content => template('profiles/activemq.xml.erb'), 
     } 
    } 

    group { 'activemq': 
     ensure => present, 
    } 
    user { 'activemq': 
     groups => 'activemq', 
     comment => 'Service user for running the ActiveMQ service', 
     home => "/opt/apache-activemq-$activemq_version", 
     ensure => present, 
     shell => '/bin/bash', 
    } 

    file { "/opt/apache-activemq-$activemq_version" : 
     ensure => directory, 
     owner => 'activemq', 
     group => 'activemq', 
     mode => '0755', 
    } 
    archive { "/tmp/apache-activemq-$activemq_version-bin.tar.gz" : 
     ensure  => present, 
     source  => 'http://archive.apache.org/dist/activemq/5.13.3/apache-activemq-5.13.3-bin.tar.gz', 
     checksum  => 'c19e2717f5c844a2f271fcd39eb024d04ebcfa5d', 
     checksum_type => 'sha1', 
     extract  => true, 
     extract_path => '/opt', 
     creates  => "/opt/apache-activemq-$activemq_version/bin", 
     cleanup  => true, 
     user   => 'activemq', 
     group   => 'activemq', 
    } 

    # Create the brokers defined in hiera. 
    $brokers = hiera('profiles::activemq::brokers') 
    $broker_defaults = { 
     cwd => "/opt/apache-activemq-${activemq_version}", 
     group => 'activemq', 
     user => 'activemq', 
    } 
    create_resources(exec , $brokers, $broker_defaults) 

    $broker_conf = hiera('profiles::activemq::broker::conf') 
    create_resources(amqconf, $broker_conf) 

} 
+0

Wird diese Definition während der Katalogkompilierung automatisch geladen? Wenn sich die Definition in einer Datei unter '/ etc/puppetlabs/code/environments/tests/modules/amqconf/manifests/init.pp' befindet, ist die Antwort wahrscheinlich yes. Ansonsten muss dies einer weiteren Überprüfung unterzogen werden, um Ihre Situation zu verbessern. FYI: https://docs.puppet.com/puppet/latest/reference/lang_defined_types.html –

+0

Ich habe das referenzierte Dokument gelesen - unter dem Abschnitt Position heißt es, dass die Definition innerhalb einer Klassendefinition liegen kann (obwohl dies nicht der Fall ist) empfohlen). Das ist mein Fall, sowohl die Definition als auch die Verwendung des definierten Ressourcentyps befinden sich im selben Manifest/derselben Klasse. – sceaj

+0

kannst du uns deine ganze Klasse zeigen? – ptierno

Antwort

3

war ich nie in der Lage die in der Klasse zu bekommen definieren zu arbeiten, aber durch sie in einer eigenen Datei platzieren konnte ich die definieren, um zu arbeiten.

amqconf.pp

define profiles::amqconf (
    $activemq_home = '/opt/apache-activemq', 
    $group   = 'activemq', 
    $mode   = 0644, 
    $owner   = 'activemq', 
    $broker_name = $title, 
    $broker_port = 61616, 
    $broker_network_uri = 'NONE', 
) { 
    file { $title: 
     ensure => present, 
     path => "${activemq_home}/${broker_name}/conf/activemq.xml", 
     content => template('profiles/activemq.xml.erb'), 
    } 
} 

und erklärte es dann in activemq.pp

profiles::amqconf { 'amq-1-conf' : 
    broker_name => 'amq-1', 
    activemq_home => "/opt/apache-activemq-${activemq_version}", 
} 

Die Arbeiten definieren, wie erwartet.

Verwandte Themen