A primeira é provavelmente a melhor ideia. O Puppet tem um atributo para isso no tipo file
builtin; apenas faça algo como
file { "idea-license":
source => "puppet:///.../community-license",
replace => false,
}
Isso instalará a licença da comunidade se o arquivo de licença ainda não existir, mas não o tocará, se houver.