Можно ли импортировать классы/объекты/функции python в файлы марионеток (файлы .rb с пользовательскими поставщиками или любые другие)? Есть ли способ, кроме «exec», запустить код Python с помощью марионетки?
Можно ли импортировать код Python в кукольные файлы?
Ответы (1)
В Ruby есть метод system()
, с помощью которого вы можете запустить внешнюю программу Python. Ruby также имеет fork()
и exec()
, с помощью которых вы можете создавать свои собственные, с большим контролем. Puppet также имеет обертки вокруг последнего, которые может использовать код вашего плагина Ruby.
Но вы, кажется, просите о чем-то другом. Стандартная реализация C Ruby предоставляет собственные (C) расширения, а Python имеет C API. Таким образом, в принципе можно встроить интерпретатор Python в Ruby через собственное расширение, с вызовами в него по пути Ruby --> C --> Python. Вы можете использовать такое расширение в любом плагине Ruby, который поддерживает Puppet, включая пользовательские функции, пользовательские факты, поставщиков ресурсов и даже шаблоны ERB.
На практике я не могу рекомендовать подход встраивания. Хотя я уверен, что это можно заставить работать, это кажется ненужным усложнением и большими накладными расходами во время выполнения.