标签: puppet

使用Vagrant,为什么木偶供应比定制包装盒更好?

我正在创建一个虚拟机来模仿我们的生产Web服务器,以便我可以与新的开发人员共享它,以便尽快加快速度.我已经浏览过Vagrant文​​档但是我不明白使用通用基本框和使用Puppet配置所有内容的优势,而不是打包已经安装和配置的所有内容的自定义框.我能想到的只是;

使用Puppet与自定义打包盒的优点

  • 易于让每个人都保持最新 - 能够将清单置于版本控制之下并共享回购,以便其他开发人员可以简单地提取新更新并重新运行puppet,即"vagrant provision".
  • 清单中记录了环境.
  • 能够使用在生产环境中定义的木偶模块来确保相同的环境.

使用Puppet与自定义打包盒的缺点

  • 编写清单所需的时间比简单地安装和配置自定义打包的盒子要长.
  • 使用puppet第一次构建虚拟机需要的时间比简单地下载自定义打包的盒子要长.

我觉得我必须错过一些重要的细节,你能想到更多吗?

puppet vagrant

12
推荐指数
2
解决办法
1321
查看次数

Puppet 2.7:调用puppet apply init.pp什么都不做 - 为什么?

目录和文件布局如下:

app_test/
app_test/manifests
app_test/manifests/init.pp
app_test/manifests/test.pp
Run Code Online (Sandbox Code Playgroud)

内容init.pp:

class app_test {
    include app_test::test
}
Run Code Online (Sandbox Code Playgroud)

内容test.pp:

class app_test::test {
    exec { 'hello world':
        command => "/bin/echo Hello World >> /tmp/are-you-there.txt"
    }
}
Run Code Online (Sandbox Code Playgroud)

Puppet v2.7.11已安装.

$ puppet apply init.pp 
notice: Finished catalog run in 0.01 seconds
Run Code Online (Sandbox Code Playgroud)

有人可以说明为什么这不会生成文件/tmp/are-you-there-txt

manifest puppet apply

11
推荐指数
2
解决办法
2万
查看次数

使用puppet设置环境变量

我正在尝试找出用puppet设置一些环境变量的最佳方法.

我可以使用exec而且只是这样做export VAR=blah.但是,这只会持续到本届会议.我还想过将它添加到文件的末尾,比如bashrc.然而,我不认为有一种可靠的方法可以检查它是否已经准备就绪; 所以它最终会在每一次傀儡中加入.

ruby deployment environment environment-variables puppet

11
推荐指数
1
解决办法
1万
查看次数

流浪木偶模块路径

Puppet 2.7.19
Vagrant version 1.0.6
VM OS Ubuntu 12.04
Run Code Online (Sandbox Code Playgroud)

我试图从vagrant设置puppet模块路径.这看起来应该很简单.

在我的Vagrant文​​件中,我有:

Vagrant::Config.run do |config|
  config.vm.provision :puppet, :module_path => "my_modules"
  config.vm.provision :puppet, :options => ["--modulepath", "my_modules"]
end
Run Code Online (Sandbox Code Playgroud)

当我更改模块路径的值时,似乎没有效果(之后vagrant reload)

这是一个来自的小贴士 vagrant up

[default] -- v-root: /vagrant
[default] -- manifests: /tmp/vagrant-puppet/manifests
[default] -- v-pp-m0: /tmp/vagrant-puppet/modules-0
Run Code Online (Sandbox Code Playgroud)

请注意/tmp/vagrant-puppet/modules-0?这是关于什么的?

然后从流浪者里面:

vagrant@precise64:~$ puppet apply --configprint modulepath
/home/vagrant/.puppet/modules:/usr/share/puppet/modules
Run Code Online (Sandbox Code Playgroud)

所以当我这样做时: puppet module install puppetlabs/mysql

我收到此错误:

Preparing to install into /home/vagrant/.puppet/modules ...
Error: Could not install module 'puppetlabs-mysql' (latest)
  Directory /home/vagrant/.puppet/modules does not exist
Run Code Online (Sandbox Code Playgroud)

所以我必须要: …

puppet vagrant ubuntu-12.04

11
推荐指数
2
解决办法
8007
查看次数

如何从github repo克隆然后在puppet上运行npm install

我已经研究了如何点燃一个流浪盒和apt-get install包装

我现在想要git clone在运行npm install和运行应用程序之前从github获取node.js reponode app.js

我希望能够通过发布BASH命令来实现这一目标,但我现在看到傀儡要求以傀儡的方式完成.谷歌在这个问题上的结果令人困惑和不一致.

那你如何告诉Puppet git clone从github获取node.js包然后安装呢npm install

git puppet node.js npm vagrant

11
推荐指数
1
解决办法
1万
查看次数

为什么bundler使用多个gem位置?

这是在Puppet的捆绑中发生.

Gemfile 指定

gem "puppet", :path => File.dirname(__FILE__), :require => false
Run Code Online (Sandbox Code Playgroud)

但是我安装的其中一颗宝石毕竟$GEM_HOME出现了$:.

$ bundle exec ruby -e 'puts $:'
...
/home/puppy/puppet-git-clone/lib
...
/usr/lib/ruby/vendor_ruby
...
/home/puppy/gems/gems/puppet-3.7.5/lib
...
Run Code Online (Sandbox Code Playgroud)

这本身并不是问题,但显然Ruby会加载Puppet 3.7.5而不是3.7.3我检出的git repo.

$ bundle exec irb
irb(main):001:0> require 'puppet'
=> true
irb(main):002:0> Facter.value(:puppetversion)
=> "3.7.5"
Run Code Online (Sandbox Code Playgroud)

为什么Puppet没有从git树加载,我该如何进一步调试呢?

更新

木偶.gemspec可能会参与其中.它在指定版本方面很聪明.我现在担心Rubygems实际上会加载已安装的3.7.5gem,以便Puppet.version真实地报告错误的值,抛弃bundler.这可能是发生了什么?

更新2

正如评论中所建议的那样,我尝试静态设置路径和版本Gemfile.

gem "puppet", "3.4.2", :path => "/home/puppy/puppet-git-clone", :require => false
Run Code Online (Sandbox Code Playgroud)

至于结果,至少bundler …

ruby gem rubygems puppet bundler

11
推荐指数
1
解决办法
369
查看次数

如何使用基于puppet的引导在EC2实例中设置主机名

我正在尝试使用EC2实例在AWS中构建一个木偶管理基础架构(非企业).使用puppetlabs-aws模块我可以通过方便的方式创建机器.接下来是在每个节点上进行本地设置,最重要的是设置唯一的主机名.我怎样才能做到这一点?

我知道的一种方法是通过user_data参数提供脚本.这将是很好的,但为了可用,我需要能够参数化该脚本,以避免为每个代理重复一次脚本.

是否有意义?我真的很感激一种实现这一目标的便捷方式,因为我想以编程方式启动新实例.任何建议都将被考虑.

更新

举一个我的问题的例子,考虑我的配置木偶清单的这个片段:

ec2_instance { 'backend':
  ensure => present,
  name => 'backend',
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  user_data => template('configure.erb'),
}

ec2_instance { 'webfront':
  ensure => present,
  name => 'webfront',
  region => 'us-west-2',
  image_id => 'ami-f0091d91',
  instance_type => 't2.micro',
  key_name => 'mykey',
  security_groups => ['provision-sg'],
  user_data => template('configure.erb'),
}
Run Code Online (Sandbox Code Playgroud)

这将确保两个实例启动并运行.请注意user_data => template('configure.erb')引用模板脚本,该脚本在创建后在实例上执行.如果我只知道决定依据的数据,我可以在这里设置主机名(或我想要的任何东西).我可以在实例描述中添加标签,但configure.erb据我所知,从脚本中无法读取.

无论如何,设置主机名只是我解决根本问题的想法.可能还有其他更方便的方法.我想要的只是让这两个实例代表木偶大师的不同节点类型的方法.

puppet amazon-ec2 amazon-web-services puppetlabs-aws

11
推荐指数
1
解决办法
954
查看次数

用Puppet编码地狱

我在用木偶编码地狱的文件.即使是最简单的尝试也行不通:

hiera-data/test.yaml:
---
test: Äñö

init.pp:
  $test = hiera('test')
  file { "/root/encoding.txt":
    ensure  => file,
    content => $test
  }
Run Code Online (Sandbox Code Playgroud)

在puppet服务器上一切都很好看:

puppet:~ # file -i /etc/puppetlabs/puppet/hiera-data/env/test.yaml
/etc/puppetlabs/puppet/hiera-data/env/test.yaml: text/plain charset=utf-8
puppet:~ # cat /etc/puppetlabs/puppet/hiera-data/env/test.yaml
---
test: Äñö
puppet:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

在傀儡代理人:

puppet-test:~ # locale
LANG=POSIX
LC_CTYPE=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

跑完后:

puppet-test:~ # file -i encoding.txt
encoding.txt: text/plain charset=utf-8
Run Code Online (Sandbox Code Playgroud)

但:

cat encoding.txt

更新:这里是约翰评论中提到的HEX数据(查看时vi :%!xxd):

0000000: efbf bdef bfbd efbf bdef bfbd efbf bdef  ................
0000010: bfbd 0a                                  ...
Run Code Online (Sandbox Code Playgroud)

更新:正如彼得的评论中所述,直接运行hiera并未提供任何进一步的见解.特别是,我只能在服务器上试用它,因为代理没有源. 在此输入图像描述

我的环境已经过时,但我不允许使用任何更新的版本(至少还没有,没有任何好的理由):

  • SuSE Enterprise …

ruby encoding puppet

11
推荐指数
1
解决办法
371
查看次数

如何自动设置开发环境?

我的任务是在多台Windows机器上建立基于Java的开发环境.问题是我希望在每台机器上自动轻松地完成这个过程,这样开发人员就不必浪费时间下载和安装所有不同的应用程序.理想情况下,我希望有以下内容:

  • 自动和无人值守的初始安装
  • 这些安装上的某种监视器可以确保所有机器之间的设置保持不变
  • 可以在需要时推送新设置/程序/升级.

我已经研究了几种工具.目前最有前途的似乎是Puppet.但是,Puppet在Windows中不能正常工作......使用VM映像可以解决第一个要求,但由于硬件在整个机器上不同并且升级不容易,因此它是不可能的.

有没有人有过这种任务的经验?你会如何解决它?

java development-environment provisioning puppet

10
推荐指数
1
解决办法
1635
查看次数

如何使用Vagrant,Chef和/或Puppet使用机器特定的SSL证书来配置VM?

我有一个要求,我想在几个虚拟机上配置Java应用程序所需的机器特定SSL证书(使用机器的IP /主机名生成).

我可以提前创建这些证书,如QA-Machine01,Prod-Machine01等名称,并可以将它们保存在某个文件夹中.

如何让Vagrant动态选择这些证书,获取它的名称(QA-Machine01,Prod-Machine01)并使用证书名称为机器名配置VM?

puppet ssl-certificate chef-infra vagrant

10
推荐指数
1
解决办法
326
查看次数