Können Python-Klassen/Objekte/Funktionen in Puppet-Dateien (.rb-Dateien mit benutzerdefinierten Anbietern oder anderen) importiert werden? Gibt es einen anderen Weg als "exec", um Python-Code mit Puppet auszuführen?Ist es möglich, Python-Code in Puppet-Dateien zu importieren?
Antwort
Ruby hat eine system()
Methode, mit der Sie ein externes Python-Programm ausführen können. Ruby hat auch fork()
und exec()
, mit denen Sie Ihre eigenen, mit mehr Kontrolle rollen können. Puppet hat auch Wrapper um die letzteren, die Ihr Ruby-Plugin-Code benutzen kann.
Aber Sie scheinen nach etwas anderem zu fragen. Die standardmäßige C-Ruby-Implementierung bietet native Erweiterungen (C) und Python eine C-API. Es ist daher möglich, im Prinzip, einen Python-Interpreter in Ruby über eine native Extension einzubetten, mit Aufrufen in einen Ruby -> C -> Python. Sie können eine solche Erweiterung in jedem Ruby-Plugin verwenden, das Puppet unterstützt, einschließlich benutzerdefinierter Funktionen, benutzerdefinierter Fakten, Ressourcenanbietern und sogar ERB-Vorlagen.
In der Praxis kann ich den Einbettungsansatz nicht empfehlen. Obwohl ich mir sicher bin, dass es funktioniert werden könnte, scheint es eine Menge unnötiger Komplikationen zu sein, mit viel Laufzeitaufwand.
Sie sind wahrscheinlich besser dran zu ansible Schalten, wie es Python basiert Siehe http://docs.ansible.com/ansible/developing_api.html oder Ruby zu lernen und für Marionette in Ruby on Code Ihr Add schreiben stattdessen – Vorsprung