【问题标题】:How to change the default location of the Puppet files on a Vagrant VM?如何更改 Vagrant VM 上 Puppet 文件的默认位置?
【发布时间】:2016-01-28 23:42:37
【问题描述】:

我正在放弃 MAMP,转而将 Vagrant Ubuntu VM + Puppet 用于我的 Wordpress 开发工作流程。最终,我想在登台和生产机器上重用 puppet 配置。

Vagrant 默认运行 /tmp/vagrant-puppet-3 下的 Puppet 文件(模块、清单、hiera.yaml)。但是,我的理解是,在真实服务器上,可以将这些文件放在默认的 Puppet 目录下,即/etc/puppet/

我知道 Puppet 在/tmp/vagrant-puppet-3 下可以正常工作,但是我希望我的开发机器尽可能接近未来的暂存/生产机器。

所以...我的问题是:如何让 Vagrant 从 /etc/puppet/ 创建和运行 puppet 文件?

【问题讨论】:

    标签: wordpress workflow vagrant puppet


    【解决方案1】:

    Vagrant Puppet 供应商有三个感兴趣的变量。您可以指定manifest_file 来标识起始清单,指定manifests_path 来标识清单目录,并指定modules_path 来提供模块路径的哈希值。对于您的示例,vagrantfile 的相关部分可能如下所示:

    local.vm.provision :puppet do |puppet|
       puppet.manifests_path = "/etc/puppet/manifests"
       puppet.module_path = "/etc/puppet/modules"
       puppet.manifest_file = "/etc/puppet/manifests/site.pp"
       puppet.options = [
          '--verbose',
          '--debug',
       ]
    end
    

    更多详情请点击此处:https://docs.vagrantup.com/v2/provisioning/puppet_apply.html

    【讨论】:

    • 我的印象是这些变量引用了主机目录而不是 VM 目录。只是为了确保我尝试了你的建议并且 vagrant 抛出以下错误:The manifests path specified for Puppet does not exist: /etc/puppet/manifests.
    【解决方案2】:

    这里的一个选项是使用librarian-puppet 之类的工具将您的模块自动安装到 Vagrant VM 上的/etc/puppet/modules/。 Librarian-puppet 能够从 GitHub 或 PuppetForge 下载任何 Puppet 模块的特定版本。

    这是一个很好的例子,说明如何在实践中实现这一点(包括示例 VagrantFile 等):https://github.com/purple52/librarian-puppet-vagrant

    在上面的示例中,请密切注意 Vagrant 的 main.sh shell provisioning script。它实际上是在VM上安装librarian-puppet,然后调用librarian-puppet install(安装配置的模块)。

    librarian-puppet 初始化 VM 后,您可以简单地使用 Vagrant 中的普通 Puppet 配置来实际加载/运行模块,例如

    # This assumes you have a "puppet/manifests/main.pp" script 
    # under your vagrant folder
    config.vm.provision :puppet do |puppet|
      puppet.manifests_path = "puppet/manifests"
      puppet.manifest_file  = "main.pp"
    end
    

    【讨论】:

    • 我了解librarian-puppet 的用处(实际上我一直在探索具有类似功能的r10k)。但是,您提供的示例仅解决了部分问题。这些模块是从/ect/puppet/modules 加载的,但清单仍然是从主机复制到/tmp/vagrant-puppet-3 下的VM 的流浪托管文件。我想让 vagrant 在/ect/puppet/ 下的 VM 上执行所有与 puppet 相关的文件(模块 + 清单)。
    • 你可以有一个简单的 Vagrant shell provisioning script 将你的清单从 /tmp/vagrant-puppet-3 复制到 /etc/puppet/
    • 另一种选择是,如果您的 Puppet 脚本受源代码控制(例如,在 GitHub 或类似中),您可以创建一个 Vagrant 配置脚本,将它们从源代码控制(例如 git clone)拉到直接/etc/puppet/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    相关资源
    最近更新 更多