在Ubuntu 11.04上安装Nginx 1.0.5时,如何使用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",creates => "/etc/apt/sources.list.d/Nginx-stable-natty.list",}

这将告诉exec只有在该文件不存在的情况下运行.如果还有其他方法来检查exec是否已成功运行,则可以使用onlyif =>或除非=指定要检查的命令.

2)

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

这将告诉exec只有通知它才能运行,并且会告诉该程序包通知执行程序它应该运行. (您可以在python-software-properties包节中指定notify => Exec [“Nginx_repository”];关系一端的通知效果与关系另一端的订阅效果相同. )

第二种方法的缺点是,如果出现任何问题,木偶将永远不会弄清楚,如果软件包安装的方式不同于通过该木偶规则(例如在其他地方作为依赖关系),那么它将永远不会运行exec (和Nginx软件包安装将会保持失败).

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

相关文章

目录前言一、创建Hadoop用户二、更新apt和安装Vim编辑器三、...
原文连接:https://www.cnblogs.com/yasmi/p/5192694.html ...
电脑重启后,打开VirtualBox,发现一直用的虚拟机莫名的消失...
参见:https://blog.csdn.net/weixin_38883338/article/deta...
Ubuntu 18.04 LTS 已切换到 Netplan 来配置网络接口。Netpla...
介绍每个 Web 服务都可以通过特定的 URL 在 Internet 上访问...