我在让 puppet 代理对 master 进行身份验证时遇到问题。
在代理上,我首先做了
sudo puppet agent --test
info: Creating a new SSL key for m-agent-2
info: Caching certificate for ca
info: Creating a new SSL certificate request for m-agent-2
info: Certificate Request fingerprint (md5): 43:30:57:53:5B:20:F7:12:CD:94:59:17:12:28:68:A4
Run Code Online (Sandbox Code Playgroud)
然后在主人sudo puppet cert list身上我做了并得到了
"m-agent-2" (43:30:57:53:5B:20:F7:12:CD:94:59:17:12:28:68:A4)
Run Code Online (Sandbox Code Playgroud)
然后我做了sudo puppet cert sign m-agent-2,它返回了
notice: Signed certificate request for m-agent-2
notice: Removing file Puppet::SSL::CertificateRequest m-agent-2 at
'/var/lib/puppet/ssl/ca/requests/m-agent-2.pem'
Run Code Online (Sandbox Code Playgroud)
然后我做了sudo puppet agent --test,它返回了
info: Caching certificate for m-agent-2
err: Could not …Run Code Online (Sandbox Code Playgroud) 我想学习木偶,但我对一件事感到困惑。
我已经安装了许多 python 模块、apache 模块、PHP 插件等。我可以将所有这些转换成 puppet 以便在我的新服务器中 puppet 自动安装它们吗?
我很困惑这将如何工作。我不记得我安装了哪些东西或如何配置它们。人们是如何做到的?
以 ssh_authorized_key 的包装为例:
define sshauthkeys::helper ($user,$ensure='present') {
ssh_authorized_key { "puppet: ${name2} ${user}":
ensure => $ensure,
type => $ssh_keys["${name2}"]["type"],
key => $ssh_keys["${name2}"]["key"],
user => "${user}"
}
}
Run Code Online (Sandbox Code Playgroud)
假设我想为该资源类型引入对“目标”参数的支持,我会执行以下操作:
define sshauthkeys::helper ($user,$ensure='present', $target='') {
Run Code Online (Sandbox Code Playgroud)
问题是,如果我想使用从 $user 的 homedir 派生的 puppet 的合理默认值 - 并在边缘情况下覆盖它,我将失去在所有其他情况下设置默认值所做的工作的好处。
有没有一种方法可以选择性地覆盖该值而不必编写两个函数?
更好地描述问题:
定义 ssauthkeys::helper ($user,$ensure='present', $target='') {
ssh_authorized_key { "puppet: ${name2} ${user}":
// etc etc...
target = $target
// ^--- Here, I'm forcing it to '' - how do I use the puppet
// built-in derivation, and only override …Run Code Online (Sandbox Code Playgroud) 我有一个现有的 httpd.conf 文件,我应该可以在运行 Ubuntu 的 Vagrant 实例上工作,我正在使用 Puppet 进行配置。
我遇到的问题是模块名称。httpd.conf 指定了一堆模块,如下所示:
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule allowmethods_module modules/mod_allowmethods.so
LoadModule asis_module modules/mod_asis.so
LoadModule auth_basic_module modules/mod_auth_basic.so
Run Code Online (Sandbox Code Playgroud)
要设置所有这些模块,我需要告诉我正在使用的 Puppet Apache 模块(通过Example42)我想要安装和启用哪些模块名称。问题是模块名称与 httpd.conf 行不是1:1 匹配。换句话说,不能总是从文件中推断出模块名称。
例如,这是我,尝试启用文件 ( mod_access_compat.so)的第一行:
vagrant@lucid64:~$ sudo a2enmod access_compat
ERROR: Module access_compat does not exist!
vagrant@lucid64:~$ sudo a2enmod access_compat_module
ERROR: Module access_compat_module does not exist!
vagrant@lucid64:~$ sudo a2enmod accesscompat
ERROR: Module accesscompat does not exist!
Run Code Online (Sandbox Code Playgroud)
tl;dr:我怎样才能知道正确的模块名称a2enmod而不去猜测?
我有一个 puppet 安装,我试图在其中检查雾版本(用于云配置),但没有得到响应,所以我认为它没有安装。我需要雾才能利用 puppet 的 vmware 克隆能力。无论如何,似乎雾是通过 ruby gems 安装的,但是当我查看fog.io 时,它与我看到的其中涉及 php/apache/mysql 等的雾 wiki 页面并不相似,并且没有提及.fog 文件。因此,我正在努力确保我为我的人偶配置安装了正确的雾。
我在这里寻求澄清。似乎用户定义类型的managehome属性仅在用户不存在时才有效。看看这个 DSL
user { 'artifactory':
ensure => 'present',
home => '/home/artifactory',
managehome => true,
}
file { '/home/artifactory/data':
ensure => link,
target => '/var/lib',
require => User['artifactory'],
}
Run Code Online (Sandbox Code Playgroud)
我第一次运行它时它工作正常,但是,如果我删除了artifactory用户的主目录,然后再次运行它,puppet barfs。
错误:无法在确保上设置“链接”:没有这样的文件或目录
我的第一个想法是真的?看一下文档
管理用户时是否管理家目录。这将在确保 => 存在时创建主目录
如果我删除用户并重试,它会起作用。那么这是设计使然还是错误?对我来说似乎很微妙。
我试图让这样的东西在我的 Puppet 清单中工作:
if $hostname == 'host1' || $hostname == 'host2' {
# Modified config.txt for portrait mode.
file { '/boot/config.txt' :
ensure => present,
mode => '0755',
source => 'puppet://puppet/files/boot/config.txt.portrait',
}
} else {
# Normal config.txt for landscape mode.
file { '/boot/config.txt' :
ensure => present,
mode => '0755',
source => 'puppet://puppet/files/boot/config.txt.landscape',
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这失败了。根据主机名,包含不同文件的最佳方法是什么?
我有一个类在 puppet 文件文件夹中准备配置文件和密钥,以便其他节点可以下载它们。除了 puppet master 之外,每个其他节点都会调用一次该类。
我的问题是我只需要创建一次根目录,例如:
file { '/etc/puppet/files/root':
ensure => directory
}
Run Code Online (Sandbox Code Playgroud)
但是,当我开始多次调用该类时,这会导致重复资源。
我知道我可以很简单地通过使用这样的东西来提供一个独特的资源标题来修复它:
file { "create-parent-dir-for-${name}":
path => '/etc/puppet/files/rootdir',
ensure => directory
}
Run Code Online (Sandbox Code Playgroud)
但是创建许多额外的资源来做同样的事情感觉是错误的,所以我很想知道是否有替代解决方案。
我刚刚开始阅读 r10k,因为我喜欢它可以基于 Git 分支创建动态环境的事实。现在,我刚刚读到 Puppet 可以在没有 r10k 的情况下做到这一点。r10k 提供了哪些 Puppet 无法提供的功能?如果我只想要基于 Git 分支的动态基于目录的环境,我还需要 r10k 吗?
我的第一个想法是做这样的事情:
define my_user( $name = $title, $ensure = present, $uid, $gid, $password, $groups, $comment, $shell ) {
$managehome = $ensure ? {
present => true,
default => false,
}
user { $name:
ensure => $ensure,
managehome => $managehome,
uid => $uid,
gid => $gid,
password => $password,
groups => $groups,
comment => $comment,
shell => $shell,
}
}
Run Code Online (Sandbox Code Playgroud)
这有几个问题:
user类型属性,我需要my_user在两个地方进行更改。user声明以使用my_user.也许有:
有人有什么建议吗?
puppet ×10
linux ×2
apache-2.2 ×1
centos ×1
cloud ×1
httpd.conf ×1
mysql ×1
php ×1
puppetmaster ×1
r10k ×1
rubygems ×1
ssl ×1