我正在使用 Debian 7.x
这是多么奇怪的行为啊
- 我正在通过 vagrant provisioner 调用 puppet
- 我使用 puppetlabs/debian-7.8-64-puppet 作为基础镜像
为什么即使我的 Puppet 脚本中没有任何地方引用 Apache,Apache 仍会加载?
以下是整个木偶脚本:
#
# Install all required packages
#
$packages = [
"curl",
"nginx",
#"php5-gd",
#"php5-cli",
"php5-fpm",
"php5-ldap",
#"php5-mysql",
"mysql-server",
"htmldoc",
]
package { $packages:
ensure => present,
}
#
# Configure PHP-FPM
#
service { "php5-fpm":
ensure => running,
require => Package['php5-fpm'],
}
#
# Configure NGINX
#
service { "nginx":
require => Package["nginx"],
ensure => running,
enable => true
}
file { "/etc/nginx/sites-available/default":
ensure => "file",
require => Package["nginx"],
content => file("/var/www/.vagrant/puppet/modules/nginx/files/aerospace"),
}
file_line { "Append required Cadorath Aerospace NGINX parameters":
require => Package["nginx"],
path => "/etc/nginx/fastcgi_params",
line => file("/var/www/.vagrant/puppet/modules/nginx/files/params.conf"),
}
每当我取消注释 php5-gd 或 php5-mysql - Apache 就会以某种神奇的方式加载并优先于 NGINX ???
我直接取消注释该行 - 重建机器 SSH 并运行 ps -aux,然后突然发现 Apache 而不是 NGINX 在为我的页面提供服务
有想法吗?
答案1
您在列表中指定的包的顺序是无关紧要的,Puppet将从中$packages
创建多个对象并以任意顺序执行它们,每个对象都会导致一次调用,这会阻止使用您想要安装的包的完整列表进行自己的依赖关系解析,并且可能会导致引入默认包来解决问题(在本例中为 Apache)。package
apt-get install
apt
解决这个问题的一种方法应该类似于以下内容:
$packages = [
"curl",
# "nginx", ## Not nginx!
"php5-gd",
"php5-cli",
"php5-fpm",
"mysql-server",
"htmldoc",
]
package { 'nginx':
ensure => present,
}
package { $packages:
ensure => present,
require => Package['nginx'],
}
所以你要确保这nginx
是第一个安装的包(可能需要对其他或额外的包而不是 nginx 执行此操作,这取决于实际的依赖树如何运作。