È possibile utilizzare Puppet per assicurarsi che siano presenti più file in una directory senza definirli tutti?


8

Ho duecento server una tantum con file di configurazione diversi che devono essere presenti in una directory. Copie dei file risiedono sul burattinaio.

All'interno di una delle mie classi ho un set predefinito di configurazioni che vengono sempre inviate al nodo, in questo modo:

file { "/etc/someprogram/config/000-default":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/000-default",
}

Quello che vorrei avere è qualcosa del genere:

$filearray = directory listing of /etc/puppet/modules/someprogram/files/$fqdn
with each file as an element into array

$filearray.each(
file { "/etc/someprogram/config/$filename":
  ensure => "present",
  owner => "root",
  group => "root",
  mode =>  0764,
  source => "puppet:///modules/someprogram/files/$fqdn/$filename",
}
)

Non conosco molto bene le marionette ma ho l'impressione che non ci sia modo di farlo.


1
Andrebbe bene con la gestione ricorsiva della directory in cui risiedono ( recurse => truesul filetipo), invece di dichiarare ogni file come risorsa separata?
Shane Madden,

Risposte:


8

Puoi fare quello che stai provando con questo:

file { "/etc/someprogram/config":
    ensure => directory,
    recurse => remote,
    source => "puppet:///modules/someprogram/files/$fqdn"
    #Other options
}

Questo copierà tutti i file in $ fqdn in / etc / someprogram / config, sovrascrivendoli se già esistono.


1
Controlla anche recurse => remotese la directory in questione avrà file locali che non vengono inviati dal server delle marionette.
Zoredache,

Questo è un buon consiglio, non sapevo che questo fosse stato aggiunto alle specifiche, originale modificato per riflettere questo.
bandiera della carne

3

Se si desidera definire più file in una directory senza ricorrere all'intera directory, è possibile utilizzare un array, come questo:

$myfiles = [ "/my/dir/file1", "/my/dir/file2", ]
file { $myfiles:
    ensure => "present",
    owner  => "root",
    group  => "root",
    mode   =>  0644,
    source => "puppet:///modules/someprogram/$fqdn/$name",
}

Naturalmente, con percorsi lunghi verso "/ my / dir" o molti file, diventerebbe un po 'ingombrante, quindi in tal caso sarebbe meglio creare un definitivo che includesse il percorso della directory e passare semplicemente l'array di nomi di file ad esso.


questo purtroppo non funziona quando hai un aliasset nel file: /
cweiske

1
Sembra che tu abbia un refuso $ myfiles -> $ files
Fabrizio Regini,

1
Questo non funzionerà. Non puoi fare riferimento $namequi. Funziona solo se è un tipo definito.
falso

1

Ecco un esempio di come faccio questo:

file {
        [
        '/sys/block/sda/queue/scheduler',
        '/sys/block/sdb/queue/scheduler',
        '/sys/block/sdc/queue/scheduler',
        '/sys/block/sdd/queue/scheduler',
        '/sys/block/sde/queue/scheduler',
        '/sys/block/sdf/queue/scheduler'
        ]:
  ensure  => 'file',
  content => 'deadline',
  group   => '0',
  mode    => '644',
  owner   => '0',
  type    => 'file',
}

Nell'esempio sopra, sto assegnando lo scheduler I / O di scadenza a ciascuno dei dischi su un determinato server tramite Puppet.

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.