2016-07-29 26 views
2

Ich habe gerade mit Marionette begonnen und ich habe eine elementare Frage zur Verwendung von Variablen in einer Klasse. Das ist meine KlasseDateipfade müssen voll qualifiziert sein - Puppet

# == Class: mysql::configure_mysql 
class mysql::configure_mysql inherits mysql { 

    $mysql_backup = "/var/mysql_backup" 

    #Create directories 
    file { 'mysql_backup': 
    path => '($mysql_backup)', 
    ensure => 'directory', 
    } 
} 

Ich erhalte ein Fehler

Error: Failed to apply catalog: Parameter path failed on File[mysql_backup]: File paths must be fully qualified, not '($mysql_backup)' 

Kann jemand bitte helfen Sie mir mit, wie eine Variable deklarieren und es verwenden?

Ich habe dies als Referenz verwendet: https://serverfault.com/questions/41577/how-to-fix-puppet-fully-qualified-parameter-path-error

Dank

Antwort

3

'' ist ein String-Literal in Programmiersprachen. Sie benötigen die Variable $mysql_backup, die aufgelöst werden soll. Ihre Ressource hat buchstäblich die Zeichenfolge ($mysql_backup) verwendet. Sie müssen diese Klammern auch entfernen, da sie nur einen Syntaxfehler darstellen. Aus diesen Gründen muss '($mysql_backup)' zu $mysql_backup geändert werden. Sie könnten die Variable auch in doppelte Anführungszeichen setzen, aber das würde keinen Sinn ergeben.

file { 'mysql_backup': 
    path => $mysql_backup, 
    ensure => 'directory', 
} 

Puppet verwendet auch den Titel einer Datei-Ressource als den Weg, so dass Sie könnte Ihre Ressource verkürzen:

file { $mysql_backup: ensure => 'directory' } 
+0

Ich habe versucht, Ihre Syntax und es hat geholfen, danke! – Adithya

+0

Kannst du mir bitte auch zeigen, wo ich globale Variablen speichern kann und wie verwende ich sie in verschiedenen Modulen? Ich würde das sehr schätzen. – Adithya

+0

@Adithya Globale Variablen, die von Puppet verwendet werden können, würden entweder von Facter (literale Globals, die von Ihrem System definiert würden) oder Daten (jetzt Hiera, später Puppet Data Provider; diese würden von Ihnen definiert werden) aufgerufen werden. Sehen Sie sich diese Links an: https://docs.puppet.com/facter/ https://docs.puppet.com/hiera/. –

-1

Die Titel der Datei auf Ihre Datei der absoloute Pfad sein muss.

path => $mysql_backup, 

Der Grund ist es in Ihrem Fall nicht funktioniert hat war (wie $ mysql_backup), dass Variablen interpoliert werden nicht in einfache Anführungszeichen:

file { '/your/full/file/path/here': 
    path => "${mysql_backup}" 
    ensure => 'directory', 
    } 
+0

Ändern des Titels ist nicht notwendig, aber die den Pfad in entweder den Titel _or_ Der Pfadparameter ist. Wenn Sie die Anführungszeichen korrigieren, tun Sie Letzteres. –

0

Der Pfad sollte mit eingestellt werden. Das Ändern der einfachen Anführungszeichen in Anführungszeichen würde helfen, aber dann müssten Sie auch die äußeren (..) Klammern entfernen.