Eu não sei as especificidades do gentoo, portage ou layman, e não vejo nenhum módulo existente no módulo de marionetes forjar mas a partir de uma rápida olhada em alguma documentação leiga do gentoo , parece que seria bastante fácil Escreva você mesmo com o Puppet:
stage { "first": before => Stage[main] } # Set up first stage, before main
class layman { # "overlays"?
package { "layman": ensure => present }
# Then everything else (file, execs, whatever) to configure layman,
# overlays, etc
# Looks to me like you need to change /etc/make.conf, /etc/layman/layman.cfg
# and write some execs that run "layman -a <overlay-name>"
# depending on output of "layman -i <overlay-name>"
# or possibly grepping /var/lib/layman/overlays.xmls
}
class{"layman": stage => "first"} # Set layman class to run in the first stage
Em vez de usar estágios, você pode ter require => Class[layman]
em todas as instruções package
que precisam dele. Usar require é mais detalhado; Eu usaria isso se eu precisasse apenas de algumas coisas, ou se eu estivesse exigindo uma sobreposição específica. Eu acredito que você deve geralmente evitar o uso requer que os limites do palco cruzado, no entanto, como é redundante e provavelmente agradar bugs estranhos .
Alternativo, dependendo do que você precisa, evita etapas e apenas explicitamente exige ordem. Eu faço coisas assim com o RHEL e o yum repos:
# In a "layman" module.
class layman {
[...]
}
define layman::overlay() {
exec {
"layman -a $name":
require => Class[layman],
creates => "/var/lib/layman/${name}",
}
}
class layman::overlay::php {
layman::overlay { "php": }
}
class layman::overlay::apache2 {
layman::overlay { "apache2": }
}
class apache {
include layman::overlay::apache2
package { "apache2":
ensure => present,
require => Class[layman::overlay::apache2];
}
file { "/etc/apache2/conf.d/whatever.conf":
source => "...",
require => Package[apache2],
notify => Service[apache2];
}
service { "apache2":
ensure => running,
enable => true,
require => [ Package[apache2], File["/etc/apache2/conf.d/whatever.conf"] ];
}
}
# "yoursite" module or "somephpapp" module
class yoursite::somephpapp {
include apache
include layman::overlay::php
package { "somephpapp":
ensure => present,
require => [ Class[apache], Class[layman::overlay::php] ];
}
file {
"/path/to/somephpapp.conf":
source => "...",
require => Package[somephpapp],
notify => Service[apache2]; # probably not actually required, example
}
}