Controlla la directory prima di creare il file nel pupazzo?


4

Sto provando a creare una funzione quale directory / file verrà creata solo quando esiste la prima directory, e non deve essere saltata a causa della dipendenza fallita.

Ho provato questa soluzione alternativa "onlyif" , ma sfortunatamente non funziona con la mia funzione.

$check_directory = file("/path/to/directory")
if($check_directory != '') {
    file{"/path/to/config":
        ensure  =>  directory,
        mode    =>  0755,
    }
    file{"/path/to/config/a.conf":
        ensure  =>  file,
        mode    =>  0755,
        content =>  template("config_template.conf"),
    }
}

Ho un errore:

Error: Is a directory - /path/to/directory

C'è un modo per fare qualsiasi altra istruzione if? O qualche parametro? Grazie.

Risposte:


3

Dovresti essere in grado di utilizzare semplicemente requireun'istruzione nella tua a.confrisorsa file:

file{"/path/to/directory":
    ensure  =>  directory,
    mode    =>  0755,
}

file{"/path/to/config":
    ensure  =>  directory,
    mode    =>  0755,
}
file{"/path/to/config/a.conf":
    ensure  =>  file,
    mode    =>  0755,
    content =>  template("config_template.conf"),
    require => File["/path/to/directory"],
}

Ciò assicurerà che la directory verrà creata prima del file.


Grazie per la risposta, ma è la directory differenza. Vorrei controllare un altro percorso per la configurazione, non quello che verrà creato. se lo faccio,
otterrò

Quindi devi aggiungere una risorsa file per quella nuova directory e poi usarla requirecon quella risorsa. Vedi la mia risposta modificata.
Sven

La directory / file verrà creata solo quando esiste la prima directory, ma non deve essere saltata a causa della dipendenza fallita.
skantana,

Scusa, ora ho capito. Ma il codice di esempio che hai scritto non usa il onlyiftrucco a cui ti sei collegato. Quindi sono ancora confuso: cosa hai provato esattamente e cosa non ha funzionato. Si prega di leggere Come porre domande migliori su Serverfault per evitare di perdere tempo e tempo.
Sven

0

L'ethos della @ risposta di Sven è assolutamente corretto: si imposta dipendenze della risorsa in Puppet utilizzando before, require, notify, ecc L'unica cosa che vorrei cambiare è userei la defined()funzione di test:

file { '/tmp/foo':
  ensure => 'directory',
  mode   => '0755',
}
if defined(File['/tmp/foo']) {
  notice("/tmp/foo is defined! making /tmp/bar/baz")

  file { '/tmp/bar':
    ensure => 'directory',
    mode   => '0755',
  }

  file { '/tmp/bar/baz':
    ensure  => 'present',
    mode    => '0755',
    require => File['/tmp/bar'],
  }
}

Altre due utili notizie:

  • Se si attiva il "Future Parser" in Puppet 3.2+, è possibile accedere a delle risorse attributi in questo modo: $a = File['/tmp/foo']['ensure']. Ciò memorizzerebbe il valore ensuredell'attributo per la /tmp/foorisorsa file nella variabile $a. Se decidessi di esaminare questo, riscriverei l'esempio sopra da usare if defined(File['/tmp/foo']) and File['/tmp/foo']['ensure'] == 'directory'(UNTESTED).

  • Se stai passando questi elementi come parametri a una classe, c'è un modo subdolo per accedere ai valori dei parametri della classe tramite in-puppet-how-can-i-access-a-variabile-attributo-dentro-a-definito- tipo .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.