gpt4 book ai didi

ubuntu - 在 Ubuntu 11.04 上安装 Nginx 1.0.5 时如何使用 Puppet 依赖项

转载 作者:太空宇宙 更新时间:2023-11-03 16:44:34 25 4
gpt4 key购买 nike

我是 Puppet 的新手,对使用依赖项有疑问。

我正在使用 Puppet 在 Ubuntu 11.04 上安装 Nginx 1.0.5。它需要添加一个新的 apt 存储库,因为 natty 通常与 Nginx 0.8 一起提供。在命令行中,安装过程如下:

# apt-get install python-software-properties
# add-apt-repository ppa:nginx/stable
# apt-get update
# apt-get install nginx

所以我写了这个 Puppet 脚本:

class nginx::install {
package { "nginx":
ensure => present,
require => Exec["nginx_repository"],
}

exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
}

package { "python-software-properties":
ensure => installed,
}
}

该脚本有效,但 exec{} 指令每次都会运行,而不是仅在实际安装 nginx 时运行。理想情况下,我希望“apt”命令仅在实际安装 nginx 之前运行,而不是在检查 nginx 安装时运行。

我对通知/订阅模型有初步的了解,但我不确定如何让 nginx 指令仅在实际安装 nginx 时发送“通知”信号。

最佳答案

这里有两种方法可以解决这个问题:

1)

exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
creates => "/etc/apt/sources.list.d/nginx-stable-natty.list",
}

这将告诉 exec 仅在该文件不存在时运行。如果有其他方法可以检查 exec 是否已成功运行,您可以使用 onlyif =>unless => 来指定要检查的命令。

2)

  exec { "add-apt-repository ppa:nginx/stable && apt-get update":
alias => "nginx_repository",
require => Package["python-software-properties"],
refreshonly => true,
subscribe => Package["python-software-properties"],
}

这将告诉 exec 仅在收到通知时才运行,并将告诉该包通知 exec 它应该运行。 (您可以改为在 python-software-properties 包节中指定 notify => Exec["nginx_repository"];在关系的一端通知的效果与在另一端订阅的效果相同关系的另一端。)

第二种方法的缺点是,如果出现任何问题,puppet 将永远无法解决,并且如果包是通过 puppet 规则以外的其他方式安装的(例如作为其他地方的依赖项),它永远不会运行 exec(nginx 包安装将继续失败)。

换句话说,让 exec 有某种方法来检查它是否已经运行的第一种方法是非常可取的。

关于ubuntu - 在 Ubuntu 11.04 上安装 Nginx 1.0.5 时如何使用 Puppet 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7209489/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com