у тебя результат граф, описание того в каком состоянии должна быть инфра. На выполнение того, как к этом состоянию привести инфру ты не влияешь. Если только не пишешь свои модули для этого, чтобы расширить стандартный функционал.
Без разницы как ты описываешь граф, как по мне это удобней делать императивным языком, и можно нормально следовать принципу DRY. Но и в декларативных это делать можно, например тот же puppet dsl или hcl или jsonnet или вообще yaml или json. Но делать это гораздо больней, в зависимости от их возможностей. Но я не вижу никаких приемуществ
Ну блин, поддержка/простота написания/тестирования кода, которым ты описываешь граф это основное, поэтому нет, не без разницы, как ты его описываешь.