如果一个变量是双引号并且它包含一个 \n
$test="hello\nworld"
file { '/tmp/hello':
content => $test
}
Run Code Online (Sandbox Code Playgroud)
然后创建一个新行:
/tmp/hello
hello
world
Run Code Online (Sandbox Code Playgroud)
问题
如果由于 hiera 输入或 regsubst 结果输入不是双引号怎么办:
$test2=hiera("hiera::input")
file { '/tmp/hello':
content => $test2
}
Run Code Online (Sandbox Code Playgroud)
结果是:
hello\nworld
Run Code Online (Sandbox Code Playgroud)
尝试解决问题
假设是双引号内容变量将解决问题。两者都不:
file { '/tmp/hello':
content => "$test2"
}
Run Code Online (Sandbox Code Playgroud)
也不:
file { '/tmp/hello':
content => "\"$test2\""
}
Run Code Online (Sandbox Code Playgroud)
解决了这个问题。后者导致:
"hello\nworld"
Run Code Online (Sandbox Code Playgroud)
第二次尝试
在 StackOverflow 上阅读此答案后尝试了另一种尝试。
层级文件
---
bla: haha\nblabla
Run Code Online (Sandbox Code Playgroud)
清单文件
$test=hiera('bla')
$quoted = regsubst($test, '(.*)', '"\1"')
file { '/tmp/hello':
content => $quoted
}
Run Code Online (Sandbox Code Playgroud)
结果是:
"haha\nblabla"
Run Code Online (Sandbox Code Playgroud) 从 PC1 存储库在 Centos 上全新安装(尝试了 6 和 7)。开始puppetserver咀嚼我的 RAM 几分钟然后失败并出现此错误:
Exception in thread "main" java.lang.IllegalStateException: Cannot initialize master with partial state; need all files or none.
Found:
/etc/puppetlabs/puppet/ssl/private_keys/puppet.novalocal.pem
Missing:
/etc/puppetlabs/puppet/ssl/certs/puppet.novalocal.pem
Run Code Online (Sandbox Code Playgroud)
它似乎在错误的目录中查找公钥,因为它似乎是在其他地方创建的:
[chris@puppet ~]$ sudo find /etc/puppetlabs/ -name puppet.novalocal.pem
/etc/puppetlabs/puppet/ssl/private_keys/puppet.novalocal.pem
/etc/puppetlabs/puppet/ssl/public_keys/puppet.novalocal.pem
Run Code Online (Sandbox Code Playgroud)
我愚蠢地遵循官方文档。所以这可能意味着在那里或安装包中进行一些更正
我是木偶新手。我想知道如何执行/运行一个简单的木偶类。下面是我尝试使用的类
puppet apply classExample.pp
Run Code Online (Sandbox Code Playgroud)
classExample.pp是写入类的文件。这段代码只是编译类,什么也没有发生。如何执行这个类?
# A class with no parameters
class exampleClass {
#create a directory
file {"create directory":
path => '/root/rahil/puppet/puppetDemo/tmp',
ensure => "directory",
}
}
Run Code Online (Sandbox Code Playgroud) 我公司的 Linux 服务器由 Puppet 管理。
有一个 DNS 模块,它/etc/resolv.conf根据配置为facter值的物理位置在所有服务器上进行配置。
如您所知,/etc/resolv.conf文件如下所示:
search domain.local
nameserver 1.1.1.1
nameserver 2.2.2.2
Run Code Online (Sandbox Code Playgroud)
公司内所有服务器的主机名都以两位数结尾,例如:
proxy73
Run Code Online (Sandbox Code Playgroud)
为了在两个 DNS 服务器之间拆分 DNS 网络流量,我编写了一个新的 puppet 模块,它会删除主机名的最后两位数字,如果它是奇数,则该/etc/resolv.conf文件应如上所示,但如果数字创建一个奇数,那么/etc/resolv.conf文件应该是这样的:
search domain.local
nameserver 2.2.2.2
nameserver 1.1.1.1
Run Code Online (Sandbox Code Playgroud)
但我的问题是,无论我如何编写清单,这些行总是按第一台服务器排序,然后是第二台服务器,而不是第二台服务器,然后是第一台服务器。
我写的清单的相关部分看起来像这样(请参阅if $::oddip == false原因部分,即不起作用的部分):
class dns_new::config {
case $::dcd {
'ny4': {
if $::oddip == 'true' {
file_line { "ny4 search domain":
ensure => present,
line => "${::dns_new::params::searchdomny4}",
path => "/etc/resolv.conf",
}
file_line { "ny4dns1 first":
ensure …Run Code Online (Sandbox Code Playgroud) 我想通过 puppet 添加一个系统用户到 Debian 盒子。
用户是:
user { 'puppet':
ensure => 'present',
comment => 'puppetserver daemon',
gid => '109',
groups => ['www-data'],
home => '/opt/puppetlabs/server/data/puppetserver',
shell => '/bin/false',
uid => '107',
}
Run Code Online (Sandbox Code Playgroud)
(uid 和 gid 取自包创建的用户puppetserver)。
我可以确信 uid 107 尚未被其他服务用于某些盒子吗?是否有safe uidS ON的Debian?在 Debian 中系统用户的 uid 分配是如何工作的?
我经常使用 puppet 和 augeas 工具来配置属性文件。我的最新要求是对相当长的属性文件列表应用相同的固定更改集。所以,我想一次性完成,而不是为每个属性文件编写一个augeas。
例子:
augeas { 'change_name_whatever':
lens => 'a_customized_lens',
incl => "$path/file1.properties",
changes => $change_set,
}
augeas { 'change_name_whatever':
lens => 'a_customized_lens',
incl => "$path/file2.properties",
changes => $change_set,
}
etc...
Run Code Online (Sandbox Code Playgroud)
我想使用:
augeas { 'change_name_whatever':
lens => 'a_customized_lens',
incl => "[list of files to change],
changes => $change_set,
}
Run Code Online (Sandbox Code Playgroud)
但这是不可能的,因为 augeas 需要预加载文件。
因为我使用的是 puppet 3.8,所以我不能使用foreach类型的循环。我看到在 puppet 4 中你可以声明一个文件列表,然后循环它们并做你的事情。这很酷……但在 puppet 3 中不起作用。
那么,我有没有其他解决方案然后多次复制/粘贴相同的代码?
干杯。
我有一台运行 CentOS 6.6 的机器,我想在它上面安装 Puppet 4.x。我按照文档页面上的说明操作,首先安装了 Puppet 存储库:
rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
Run Code Online (Sandbox Code Playgroud)
无论我尝试通过 yum(puppet 服务器或 puppet 代理)安装什么,它都会为我提供 puppet 版本 3.8.7。但是我在Puppet官网看到最新的Puppet是4.4。我阅读了文档,但找不到通过 yum 安装此版本的方法。
我正在学习使用 Puppet,并已成功设置并连接了具有 2 个节点的主服务器。
production我已经为正在运行的默认环境创建了文件。我的环境文件夹中还有第二组配置beta。
我想通过主服务器将 2 个节点中的 1 个分配给测试组。我该怎么做呢?
傀儡版本4
虽然我知道 Puppet 推荐使用 DNS,但它是强制性要求吗?
或者我可以为此使用普通IP?
谢谢。
整个设置都在内部网中。
我在 SuSe Linux 平台 (SLES/SLED) 上工作。最近有包因为一些问题不得不更新。所以这次我们可以手动去桌面,一一更新包。
由于此时桌面的数量较少,所以这是可能的,但在未来的时间数量将达到 1000 左右甚至更大。所以我被要求找到一些可以无缝地将更新推送到所有连接的桌面的东西。
我遇到了Puppet,这对我来说听起来不错,而且它似乎可以完成这项工作。
由于这是一个内部网设置,所以我打算要,这将在一定的位置更新一个集中的服务器(例如:在/ var / WWW /更新)(例如Apache的新版本。),我会做出同样的服务器戏梦人生。所有其他桌面都将连接到这个中央服务器以获取任何更新。
现在,一旦我在中央服务器上获得了经过认证的更新,我应该如何确保将更新的软件包(任何 rpm/etc)推送/安装到所有其他桌面?
我应该为此写什么课?
我可以编写任何从某个位置 (/var/www/updates) 获取 rpm 并在其他桌面上执行 rpm -UVH xxxxx.rpm 的类吗?
如果我朝着错误的方向前进,也请提出一些其他解决方案。
任何帮助深表感谢。
谢谢,