não foi uma tarefa fácil, já que o problema muda após a primeira execução. O problema descrito na minha pergunta só se aplica quando o servidor que tem que ser configurado é completamente novo.
Primeira execução: aguarde que todos os arquivos sejam copiados (class nginx complete) e, em seguida, coloque o arquivo de execução
Segunda corrida: use a abordagem usual de uma notificação no arquivo de execução. Desta vez, ele pode ser executado antes do serviço. isso não funciona na primeira execução.
Então resolvemos isso adicionando um arquivo "state" adicional chamado nginx-ready
então no nosso tipo definido add_daemontools.pp
define daemontools::add_service {
file { "/etc/service/${service}/run":
ensure => file,
mode => 0755,
owner => root,
group => root,
content => template("daemontools/service.erb"),
path => "/etc/service/$service/run",
# create run file when service is ready
require => File["/var/run/${service}-ready"],
# notify implies before
notify => Service["${service}"],
}
}
e em nosso módulo criamos o arquivo pronto que depende de tudo que é necessário.
class nginx ( ... params) {
...
file { '/var/run/nginx-ready':
require => [ Package[$nginx_dependencies], File[$nginx_files] ],
before => Service['nginx'],
content => 'ready file for daemontools',
}
}
Muito obrigado pela sua ajuda!