Да, есть.Это Rspec.
Общий подход:
Я понимаю, что это, вероятно, не тот ответ, на который вы надеетесь *, но вам нужно начать с написания модульных тестов Rspec-puppetкоторые обеспечивают полное тестовое покрытие для вашей кодовой базы.
Я делал это не раз, и поэтому я написал инструмент, который может помочь в такой ситуации: create_specs .Я также написал блог сообщение о том, как использовать его, чтобы помочь вам.
Обращаясь к вашему конкретному вопросу:
Существует ли какой-либо инструмент, которыйпримет имя хоста или класс хоста в качестве входных данных и графически покажет мне все другие сущности (модули, шаблоны, файлы и т. д.), которые имеют какое-либо влияние на это имя хоста или класс?
Есть, конечно, сборка Пуппета-в графической логике, и если у вас есть Puppet Enterprise, существует граф узлов .
Но, честно говоря, маршрут модульного тестирования - действительно единственный надежный способ решения этой задачи.
Метод заключается в следующем:
- Запись нод -уровневый тест Rspec-puppet для всех известных узлов.
- Используя мой инструмент или иным образом, убедитесь, что вы сгенерировали контрольный пример Rspec, который просто компилирует каталог.Используйте трюк, который я документировал , чтобы записать каталог в виде файла JSON.
- Рассмотрите данные тоже.Если ваши классы реагируют на условия, основанные на различиях во входных данных, вы перекомпилируете для каждого пути через код, используя разные данные.
Теперь для обнаружения «модулей, шаблонов, файлов, чего угодно»:
Для узлов, классов, модулей и файлов манифеста:
Затем можно использовать запрос JQ, подобный этому, чтобы найти все классы, используемые в этом каталоге, истроки и файлы в ваших манифестах:
▶ jq -jr '.resources[] | select(.line!=null) | .type, " ", .title, " (", .file, ":", .line, ")\n"' myclass.json
Accounts::User joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/test/manifests/init.pp:3)
Group joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/accounts/manifests/user.pp:207)
User joed (/Users/alexharvey/git/home/puppet-test/spec/fixtures/modules/accounts/manifests/user.pp:249)
...
Для статических файлов, на которые ссылаются параметры источника файла:
Их можно найти с помощью запроса JQ, например:
▶ jq '.resources[] | select((.type=="File") and (.parameters.source!=null)) | .parameters.source' myclass.json
"puppet:///mymodule/file"
Для шаблонов:
Что касается шаблонов, к сожалению, они явно не упомянуты в каталоге.Но когда у вас есть тесты для всех узлов, легко обнаружить файлы, которые не используются: просто удалите подозрительный файл, запустите все тесты и посмотрите, не произойдет ли что-нибудь.
Для ключей Hiera:
К сожалению, сейчас у меня нет хорошего решения для ключей Hiera.Оставьте их до последнего и проверьте те, которые, по вашему мнению, не используются, удалив и снова запустив тесты.
В общем, есть отличная серия блогов здесь по рефакторингу унаследованного кода.на это стоит взглянуть, но это не связано с Puppet.
Хорошая новость - если вы выполните все вышеперечисленное, вы выйдете на другую сторону процесса как намного улучшенный и более уверенный разработчик.Но по моему опыту, если вы попытаетесь найти кратчайший путь, не предусматривающий пропущенные тесты, я думаю, что мир боли впереди!Удачи.
* Я делаю это предположение, потому что я думаю, что вы не задали бы вопрос в противном случае!