Kann Puppet File Source von einem Webdienst stammen?


10

Gibt es eine (einfache) Möglichkeit, dass Puppet eine im Internet verfügbare Datei für die Source-Eigenschaft einer Datei verwendet?

z.B:

file { "/home/text.txt":
  source => [
    "http://www.example.com/text.txt",
  ]
}

Wenn Sie die Integrität Ihrer Server schätzen, verwenden Sie mindestens https. Und verwenden Sie eine vertrauenswürdigere Domain, da Sie nicht wissen, wer diese möglicherweise kontrolliert ... ähm ... Von hier aus wird es düsterer.
mc0e

Antworten:


4

Ich schreibe eine aktualisierte Antwort, um zukünftige Leser darüber zu informieren, dass die Dateiressource jetzt tatsächlich die HTTP-Quelle implementiert.

Aus den Dokumenten :

Quelle

Eine Quelldatei, die auf das lokale System kopiert wird. Dieses Attribut schließt sich mit Inhalt und Ziel gegenseitig aus. Zulässige Werte sind:

  • Puppet: URIs, die auf Dateien in Modulen oder Puppet-Dateiserver-Mount-Punkte verweisen.
  • Vollqualifizierte Pfade zu lokal verfügbaren Dateien (einschließlich Dateien auf NFS-Freigaben oder Windows-zugeordneten Laufwerken).
  • Datei: URIs, die sich wie lokale Dateipfade verhalten.
  • http: URIs, die auf Dateien verweisen, die von gängigen Webservern bereitgestellt werden

Sie können das Konstrukt also so verwenden, wie Sie es geschrieben haben:

file { "/home/text.txt":
  source => "http://www.example.com/text.txt",
}

2
ab Puppet Version 4.4.0 (über ticket tickets.puppetlabs.com/browse/PUP-1072 )
KJH

4

Es wurde als ein Merkmal angefordert jahrelang ... Aber Sie würden eine benutzerdefinierte Funktion für diese am Ende brauchen ... oder zu benutzen curloder wget. Siehe Puppet Forge .

Was ist in text.txt?


txt.txt ist nur ein Beispiel. Ich möchte es tatsächlich verwenden, um Freeradius-Clients von einem Administrationssystem abzurufen.
Gunwin

4

Es ist momentan nicht sofort möglich:

Quelle:

...

Die verfügbaren URI-Schemata sind Marionette und Datei. Puppet-URIs rufen Dateien vom integrierten Dateiserver von Puppet ab

defineAm Ende habe ich im Internet gefunden:

define remote_file($remote_location=undef, $mode='0644'){
  exec{ "retrieve_${title}":
    command => "/usr/bin/wget -q ${remote_location} -O ${title}",
    creates => $title,
  }

  file{$title:
    mode    => $mode,
    require => Exec["retrieve_${title}"],
  }
}

remote_file{'/home/text.txt':
  remote_location => 'http://www.example.com/text.txt'
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.