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

标签 ubuntu nginx ubuntu-11.04 puppet

我是 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/

相关文章:

windows - 如何从两个(双引导)操作系统运行相同的 eclipse 安装?

nginx 中的正则表达式先行问题

32bit-64bit - 在Natty 64位上安装32位JDK,我

linux - 为 node.js 安装 NPM 时出错

PHP rename() 忽略权限?

node.js - 如何在 ubuntu 中永久修复 Howbrew 路径问题

Ubuntu 14.04 数控 100% CPU 使用率

node.js - 永远, Node : Strange upstart behavior (restart behaving same as stop)

r - Nginx:代理传递/代理重定向到 Shiny 的 Web 应用程序

ruby-on-rails-4 - EventSource 调用 ActionController::Live 挂起