Puppet 或 Chef 是否支持复制的 puppetmasterd/Chef 服务器?这些工具会导致单点故障,这让我感到非常惊讶,但我在他们的文档或谷歌中找不到任何提及。
我知道 Puppet 和 Chef 可以在没有服务器的情况下运行(可能使用例如http://bitfieldconsulting.com/scaling-puppet-with-distributed-version-control 中描述的 git 进行更新),但这似乎是第二个 -阶级公民,大概会失去一些监控能力。
我有一个小型虚拟 linux 服务器(500 兆内存)。我最终可能会再获得一两台服务器,而不是更多。
我是开发人员,而不是系统管理员,所以我不知道涉及 linux 管理的最佳实践。我知道我不想设置机器,发出一堆命令来设置用户,安装包,更改环境变量,如果我的机器崩溃,只会丢失所有这些。
我宁愿将所有这些信息与我的代码一起保存在源存储库中。
明显的解决方案是 puppet 或 Chef,但我没有运行一组机器。我想要一种设置用户、安装软件包等的声明方式,但不想设置 ssl 证书、主服务器等(坦率地说,我不能,我的机器很便宜,内存也很少)。
是否有更好的独立机器解决方案?我希望能够快速使用此解决方案来重新创建我的机器(在 amazon、linode、rackspace 或我的桌面上)。
我正在尝试在接收新服务器时自动执行一些任务。第一件事是添加一些 yum 存储库。
我的/etc/puppet/modules/repo/manifests/init.pp:
1 class repo {
2 file { "/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL":
3 owner => root,
4 group => root,
5 mode => 0644,
6 source => "puppet:///repo/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL"
7 }
8
9 yumrepo {
10 "epel":
11 descr => 'the epel repo',
12 mirrorlist => 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch',
13 enable => 1,
14 gpgcheck => 1,
15 gpgkey => "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL",
16 require => File["/etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL"]
17 }
18 }
Run Code Online (Sandbox Code Playgroud)
使用puppet parser validate.
但是在连接 puppet 代理时出现以下错误:
# puppet agent --no-daemonize …Run Code Online (Sandbox Code Playgroud) 在我更新节点的清单之后;puppetmaster 是否自动将配置发送到节点?如果它这样做,间隔是多少,我该如何改变它?我在哪里可以找到更多关于这方面的信息?
我假设它是runintervalpuppet.conf 的?默认设置为 1800 秒;但是,自从 puppetmaster 启动以来,我还没有注意到任何配置更改。
我对 Puppet 很陌生。我只是写了一段代码来通过 puppet 安装软件
node 'myweb.com' {
include ntp
include apache
apache::vhost { 'myweb.com':
port =>8080,
docroot => '/var/www/myweb.com',
ssl => false,
priority => 10,
serveraliases => 'myweb.com',
}
Run Code Online (Sandbox Code Playgroud)
应用上述代码后,我是否应该将其删除,以免下次重复安装?
任何建议将不胜感激
我使用 Puppet 挂载 Cloudfuse 以访问 Rackspace 的 Cloudfiles,但在新主机上,挂载运行过快,即使我需要整个类。在Pro Puppet 中,James 建议像这样拆分类定义:
class cloudfuse{
include cloudfuse::install, cloudfuse::service, cloudfuse::config
}
class cloudfuse::install{
# download and install
}
class cloudfuse::config{
file{'/root/.cloudfuse':
notify => Class['cloudfuse::service'],
}
}
class cloudfuse::service{
service{'cloudfuse':
ensure => running,
}
}
Run Code Online (Sandbox Code Playgroud)
这工作得很好。当我准备好挂载时,我需要顶级的父类,如下所示:
exec{'mount /data/cloudfiles':
command => "/usr/local/bin/cloudfuse /data/cloudfiles",
require => [
File['/data/cloudfiles'],
Class['cloudfuse'],
]
}
Run Code Online (Sandbox Code Playgroud)
问题是:
cloudfuse::install而不是父母吗?我知道 requirecloudfuse::install会解决我的问题,但是如果我有一个非常简单的类,也许我不会像这样分成三个,那么我必须猜测/查看清单才能知道如何声明依赖项。
在 puppet.conf 中执行命令之前,有没有办法将消息打印到控制台?例如,假设我的清单有:
exec {
command => 'mycommandhere'
}
Run Code Online (Sandbox Code Playgroud)
我想打印一条消息,上面写着“运行我的命令”。除了在打印之前调用另一个命令之外,有没有一种简单的方法可以做到这一点?
我是木偶新手。因此,我正在尝试以最佳方式来设置有意义的清单。遵循 DRY(不要重复自己)原则,我尝试在一个模板中加载通用指令,然后从与环境匹配的文件中加载特定于环境的指令。基本上是这样的:
# nodes.pp
node base_dev {
$service_env = 'dev'
}
node 'service1.ownij.lan' inherits base_dev {
include global_env_specific
}
class global_env_specific {
include shell::bash
}
# modules/shell/bash.pp
class shell::bash inherits shell {
notify{"Service env: ${service_env}": }
file { '/etc/profile.d/custom_test.sh':
content => template('_global/prefix.erb', 'shell/bash/global.erb', 'shell/bash/$service_env.erb'),
mode => 644
}
}
Run Code Online (Sandbox Code Playgroud)
但是每次我运行puppet agent --testpuppet 时都会抱怨它找不到该shell/bash/$service_env.erb文件,但我仔细检查了它是否存在。由于输出预期值的通知语句,我知道 var 是可访问的,所以我怀疑我正在做的事情是不允许的。
我知道我可以有一个单一的template.erb并将变量传递给模板,这在这种情况下会起作用,因为 custom.sh 文件很小而且跨环境没有太多变化,但是对于更复杂的配置(httpd、solr 等)我会更喜欢访问特定于环境的文件。我也知道我可以指定特定于环境的模块路径,但我更愿意只在模板级别处理这种行为,而不是拥有多个密切命名的目录。
谢谢。
所以几周前,我开始使用 puppet 来自动化所有配置/服务。当时我正在使用 EPEL 存储库,它安装了 2.6.x 版。经过一些阅读后,我试图flatten通过 puppet stdlib访问可用的方法,并认为它在较新的 2.7.x 版本中默认可用。所以我添加了一个具有以下设置的 puppet repo:
[puppetlabs]
name=Puppet Labs Packages
baseurl=http://yum.puppetlabs.com/el/$releasever/products/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://yum.puppetlabs.com/RPM-GPG-KEY-puppetlabs
Run Code Online (Sandbox Code Playgroud)
问题是它安装了 v3.0.x 而不是 2.7.x。显然 3.0.x 是几周前才发布的重大升级。显然,我更愿意在接下来的几个月中使用 2.7.x,而 PuppetLabs 会修复在主要版本之后不可避免地出现的任何缺陷。
所以我的问题是,我可以在 puppet repo 配置中添加什么设置以仅下拉 2.7.x 分支而不是 3.0.x 分支?
有没有一种方法可以设置傀儡主人来自动接受来自客户端的所有证书(所以我不必每次都在主人上使用 puppetca)?