AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 761595
Accepted
daks
daks
Asked: 2016-03-05 06:54:41 +0800 CST2016-03-05 06:54:41 +0800 CST 2016-03-05 06:54:41 +0800 CST

Vagrant Puppet 在错误的环境中应用清单

  • 772

我在标准客户端-服务器模式下使用 Puppet 3.7,使用环境,并使用 Hiera 处理数据。我使用 Vagrant 直接从我的 Puppet 存储库测试 Puppet 清单。

我最近开始使用 Hiera 并更改了我的 Vagrantfile(和 Vagrant 目录)以使用它。它现在似乎可以与 Hiera 一起使用,但出现了另一个问题:Vagrant 认为我的虚拟机处于实验阶段时处于环境生产中。(这以前工作得很好)

Puppet 存储库看起来像

~/code/puppet
└── environments
    ├── experimental
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    ├── production
    │   ├── manifests
    │   │   └── site.pp
    │   ├── modules
    │   └── Puppetfile
    └── testing
        ├── manifests
        │   └── site.pp
        ├── modules
        └── Puppetfile

我的 Vagrant 设置存储在另一个目录中。我在此目录中创建了一个指向 ~/code/puppet 的符号链接 (ln -s),名为 puppet。Vagrantfile 看起来

config.vm.define "standalone", primary: true do |config|
    config.vm.box = "debian_wheezy+vbox_jessie+puppet_3.7"
    config.vm.hostname = "standalone.puppet.vagrant"
    config.vm.network "private_network", ip:"192.168.10.21"

    config.vm.synced_folder "puppet/hieradata", "/etc/puppet/hieradata"
    config.vm.provision :puppet, :options => ["--yamldir /hieradata"] do |puppet|
        puppet.manifests_path = "puppet/environments/experimental/manifests"
        puppet.manifest_file = "site.pp"
        puppet.module_path = [ "puppet/environments/experimental/modules", "puppet/environments/production/modules", "puppet/modules" ]
        puppet.hiera_config_path = "puppet/hiera.yaml"
    end
  end

我想我最近在使用 Hiera 后所做的更改对 Vagrant 来说是不正确的,也许黑客(链接 puppet 代码目录)是原因,但我看不出应该如何组织。

有没有人知道这个问题以及如何解决它?

谢谢

更新

我变了

puppet.manifests_path = "puppet/environments/#{env}/manifests" 

并删除 puppet.working_directory 以启动/配置我的 VM。

和

puppet.module_path = [ "puppet/modules", "puppet/environments/production/modules" ] 

它似乎让我的虚拟机可以访问我需要的生产和当前环境模块。

puppet
  • 2 2 个回答
  • 1169 Views

2 个回答

  • Voted
  1. Best Answer
    Marc Lambrichs
    2016-03-06T00:23:05+08:002016-03-06T00:23:05+08:00

    您可以为您的 puppet 运行指定所有选项。你可以使用这样的东西:

    srv.vm.provision :puppet do |puppet|
          puppet.working_directory = "/vagrant/puppet"
          puppet.module_path       = "puppet/modules"
          puppet.manifests_path    = "puppet/manifests"
          puppet.manifest_file     = "site.pp"
          puppet.hiera_config_path = "puppet/hiera.yaml"
          puppet.options           = "--debug --verbose --environment #{env}"
    end
    

    这意味着您的模块位于“puppet/modules/#{env}”中,而您的清单位于“puppet/manifests/#{env}. 现在,“env”是一个可以在 Vagrantfile 中设置的变量:

    env = "production"
    

    或者:您可以将所有变量(例如“env”)放在一个 yaml 文件中并加载它。

    作为参考,您可以在此处找到所有 puppet 提供选项:https ://www.vagrantup.com/docs/provisioning/puppet_apply.html

    • 1
  2. Felipe Alvarez
    2016-11-11T21:43:48+08:002016-11-11T21:43:48+08:00

    我来这里是为了解决类似的问题。我能够通过使用数组连接多个模块路径。这样modulepath就会变成

    modulepath = ../puppet/environments/dev/modules:../puppet/modules

    你的路径会有所不同。

    我的流浪环境将永远dev如此,所以我可以在这里对这个模块路径进行硬编码。

    我的 Vagrantfile 看起来像这样:

    Vagrant.configure(2) do |config|
      config.vm.box = "centos7"
      config.vm.synced_folder("../../puppet/trunk/server/hieradata", "/etc/puppet/hieradata")
      config.vm.provision "puppet" do |puppet|
        puppet.environment       = "dev"
        puppet.environment_path  = "../../puppet/trunk/server/environments"
        puppet.hiera_config_path = "../../puppet/trunk/server/hiera.yaml"
        puppet.module_path       = [ "../../puppet/trunk/server/environments/dev/modules", "../../puppet/trunk/server/modules" ]
      end
    end
    
    • 0

相关问题

  • 如何修复 Puppet 完全限定的参数路径错误?

  • puppet:修改配置文件后强制重启服务

  • 木偶模块资源

  • 傀儡主机名问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve