如果我在 Puppet 中的配置在两次运行之间发生了变化,是否可以为此实施一些迁移任务?
例如,我指定
apache::vhost { 'vhost.example.com':
port => '80',
docroot => '/var/www/vhost',
}
一开始,我愉快地用了几个月。然后我想将 docroot 更改为/home/www/vhost
。Puppet 随后更改了 apache vhost,但我在旧/var/www/vhost
文件夹中也有一些不受 Puppet 管理的数据。是否可以在其中添加一些迁移步骤,例如:
“如果文档根目录从 更改为/var/www/vhost
则/home/www/vhost
:mv /var/www/vhost /home/www/vhost
”。
谢谢!
答案1
也许你可以使用复杂的技巧,但我不会那样做。
困难在于,puppet 的语言不是命令式的,而是声明式的,因此当您更改变量设置时,您没有以前的值。Puppet 只会检查机器是否处于您想要的状态,如果不是,则确保它按照您要求的方式运行,否则会出错。
我认为进行此类更改的正确方法是像使用 puppet 进行旧站点那样配置新站点,并检查旧文档根目录是否存在,如果找到就将其删除。
这是您决定更改 docroot 之后的代码(未经测试的)示例:
$old_docroot = "/var/www/vhost"
$new_docroot = "/home/www/vhost"
apache::vhost { 'vhost.example.com':
port => '80',
docroot => $new_docroot,
notify => Exec['cleanup_old_docroot_if_needed'],
}
exec {'cleanup_old_docroot_if_needed':
command => "/bin/rm -qrf $old_docroot",
refreshonly => true,
}