Vagrant 使用特定于环境的木偶脚本的最佳实践是什么?

Vagrant 使用特定于环境的木偶脚本的最佳实践是什么?,vagrant,puppet,Vagrant,Puppet,我需要在开发环境中删除一些文件(例如,在使用Vagrant时),但不需要在生产环境中删除。我想在开发时禁用firewalld,但在生产中不禁用。我想在开发时禁用selinux,但在生产时不禁用 做这些的最佳实践是什么?我希望在开发环境(使用Vagrant)和生产环境中都使用我的puppet脚本。使用特定于环境的脚本不是一个好做法。相反,您应该有一些脚本,这些脚本会根据环境的不同而表现出不同的行为。让我告诉你怎么做;要使其正常工作,您需要执行两个步骤: 定义环境 您必须定义环境-我建议使用基于目录

我需要在开发环境中删除一些文件(例如,在使用Vagrant时),但不需要在生产环境中删除。我想在开发时禁用
firewalld
,但在生产中不禁用。我想在开发时禁用
selinux
,但在生产时不禁用


做这些的最佳实践是什么?我希望在开发环境(使用Vagrant)和生产环境中都使用我的puppet脚本。

使用特定于环境的脚本不是一个好做法。相反,您应该有一些脚本,这些脚本会根据环境的不同而表现出不同的行为。让我告诉你怎么做;要使其正常工作,您需要执行两个步骤:

  • 定义环境
  • 您必须定义环境-我建议使用基于目录的环境(因为基于配置的环境支持最终将被放弃)。如何设置环境是一个亲密的话题,我建议您查看

  • 在代码中使用环境
  • 假设您已经定义了诸如dev、qa、uat、prod等环境。您可以使用
    $environment
    变量获取当前环境的名称。您的清单应利用环境变量来决定是否应启用/禁用防火墙等。例如:

    (根据Felix的评论修改,谢谢@Felix)


    在上面的代码段中,如果
    $environment
    与“dev”不匹配,则仅应用防火墙角色

    使用特定于环境的脚本不是一个好的做法。相反,您应该有一些脚本,这些脚本会根据环境的不同而表现出不同的行为。让我告诉你怎么做;要使其正常工作,您需要执行两个步骤:

  • 定义环境
  • 您必须定义环境-我建议使用基于目录的环境(因为基于配置的环境支持最终将被放弃)。如何设置环境是一个亲密的话题,我建议您查看

  • 在代码中使用环境
  • 假设您已经定义了诸如dev、qa、uat、prod等环境。您可以使用
    $environment
    变量获取当前环境的名称。您的清单应利用环境变量来决定是否应启用/禁用防火墙等。例如:

    (根据Felix的评论修改,谢谢@Felix)


    在上面的代码段中,如果
    $environment
    与“dev”不匹配,则仅应用防火墙角色

    基本上是的,尽管根据角色和配置文件模式,
    webserver
    firewall
    应该是配置文件而不是角色。在这两种情况下都需要
    webserver
    ,因此结构将是
    include profile::webserver
    if$environment!='dev'{include profile::firewall}
    。感谢Frank的提醒-你的观点是正确的。顺便说一句,有木偶图案的参考吗?我想没有。除了角色和配置文件之外,角色和配置文件几乎是我所知道的唯一重要模式。这是针对Enterprise Puppet的吗?基于此链接,我认为它们在Puppet开源中可用,但PE有额外的配置要求。尝试创建一个-这相当简单。基本上是的,尽管根据角色和配置文件模式,
    webserver
    firewall
    应该是配置文件而不是角色。在这两种情况下都需要
    webserver
    ,因此结构将是
    include profile::webserver
    if$environment!='dev'{include profile::firewall}
    。感谢Frank的提醒-你的观点是正确的。顺便说一句,有木偶图案的参考吗?我想没有。除了角色和配置文件之外,角色和配置文件几乎是我所知道的唯一重要模式。这是针对Enterprise Puppet的吗?基于此链接,我认为它们在Puppet开源中可用,但PE有额外的配置要求。尝试创建一个-它相当简单。
    include profile::webserver
    if $environment != 'dev'
        include profile::firewall