【问题标题】:Exclude irrelevant external dependencies when using Vagrant with the Chef provisioner将 Vagrant 与 Chef 供应商一起使用时排除不相关的外部依赖项
【发布时间】:2014-12-11 04:07:18
【问题描述】:

(我认为这是该问题的正确 StackExchange,因为它是开发用例,而不是系统管理员用例。如果不是,请随时将其重新定位到正确的 StackExchange。)

我的应用使用 Vagrant + Chef 单独配置器来设置本地开发环境。我随意选择了一个 CentOS 6.5 机器来托管 MySQL 数据库和 RabbitMQ 总线,因为对于开发来说,VM 机器并不重要——重要的是应用程序有一些实例可以连接。所以我正在使用mysql 社区食谱和rabbitmqcommunity 食谱等。我还使用database 食谱来创建数据库和用户。

问题是 Chef 似乎希望我引入一堆不相关的外部依赖项,即使我的 Vagrant 环境受到严格控制。例如,rabbitmq 想要 erlang(很明显),但 erlang 想要 apt,这与 CentOS 无关。

同样,database 食谱需要 awspostgresql,这又与我当地的 Vagrant 环境无关。

我可以排除这些依赖项而不必自己修改说明书吗?怎么样?

【问题讨论】:

  • Chef 是一种跨平台技术。在 CentOS 上要求 APT 食谱并不重要,因为它永远不会被执行。需要下载它的原因是因为在厨师食谱实际执行之前它不会知道它所在的平台。此外,您的 Chef 服务器可能需要同时支持 Redhat 和 Debian 系统。
  • 好吧,我正在运行 Chef Solo,在这种情况下纯粹是为了 Vagrant 配置。确实,额外的食谱不会破坏任何东西。但是出于同样的原因,我不会只是在我的项目中添加 npm、digitalocean、neo4j 等的随机食谱,如果能够剔除 apt、aws、postgresql 等,那就太好了。但我明白这一点Chef 的目标是更广泛的用例,并且跨平台考虑开始发挥作用。

标签: dependencies vagrant chef-infra chef-solo


【解决方案1】:

不,目前 Chef 无法做到这一点。已经有很多关于条件依赖的提议,但没有一个达到甚至可以称之为理论的程度。请记住,这些额外的食谱不会伤害任何东西,因为它们的食谱不会运行。如果您想提出一种处理此类事情的方法,我鼓励您submit and RFC

更长的版本是依赖解析和约束解析发生在服务器上,这意味着它需要完全基于静态数据。所以正因为如此,所有依赖项都需要声明,即使它们不会在运行时全部使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-01
    • 2015-09-15
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 2017-02-01
    • 2013-09-03
    • 2021-12-08
    相关资源
    最近更新 更多