有没有办法断言木偶中的变量(或更具体地说,事实)具有特定值,并且如果不存在则中止安装?
对于背景,情况如下:
在大多数情况下,我可以引用主机名,但有时我需要使用IP地址.例如,我们的日志收集器主机需要在防火墙中为多个特定计算机(而不是整个子网)打开一个端口.我需要使用IP地址在防火墙中打开一个洞.由于机器的IP地址没有变化,我计划将IP地址编码作为配置的一部分,但我想检查各个主机上实际IP地址是否与其配置中的IP地址匹配,如果失败,它没有.那可能吗?
我在Vagrant有一个CentOS基础盒,我正站起来用木偶清单.到目前为止,这是清单中的内容:
class base {
exec { "sudocmd":
path => ["/usr/bin/","/usr/sbin/","/bin"],
command => "sudo yum update -y",
}
package { "man":
ensure => present,
}
package { "bind":
ensure => present,
}
package { "bind-utils":
ensure => present,
}
}
include base
Run Code Online (Sandbox Code Playgroud)
但是,当我说vagrant up,我得到一个错误,sudocmd yum update退出1.我已经在网上看了,但我还没有找到解决方案.有帮助吗?
========编辑=========我读了答案,我同意 - 谢谢你们.我只是在开发盒上使用它来乱搞,我需要它在我开始做它之前是最新的.
我正在使用puppet进行配置来设置Vagrant环境.
我遇到了一个问题,我希望xdebug在运行时"正常工作" vagrant up但是我需要在php.ini文件中指定主机ip地址xdebug.remote_host,显然这在使用配置的每台机器上会有所不同所以我想在发布时自动更新该值vagrant up.
VagrantFile:
config.vm.network :forwarded_port, guest: 9000, host: 9000
Run Code Online (Sandbox Code Playgroud)
.ini设置:
'xdebug.default_enable=1',
'xdebug.remote_enable=1',
'xdebug.remote_handler=dbgp',
'xdebug.remote_host=localhost:9000',
'xdebug.remote_port=9000',
'xdebug.remote_autostart=0',
'xdebug.max_nesting_level=250'
Run Code Online (Sandbox Code Playgroud)
我也试过了 xdebug.remote_host=localhost
来自vagrant机器的ifconfig结果:
vagrant@precise64 ~ : ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:cf:f9:89
inet addr:192.168.61.142 Bcast:192.168.61.255 Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)
phpinfo()函数
REMOTE_ADDR 192.168.61.2
REMOTE_PORT 51886
只是为了确认,如果我remote_host在我的osx主机上给出了我的实际IP地址,它可以正常工作.
我想知道是否有任何方法来检查字符串是否存在于另一个字符串中(即包含函数).我已经看过http://forge.puppetlabs.com/puppetlabs/stdlib,但我还没有找到这个特定的功能.也许这可以通过正则表达式来实现,但我不确定该怎么做.有人可以帮我这个吗?
您如何安全地将HTTP的TLS/SSL密钥提交到源代码控制中,以便Puppet可以使用它们?您使用哪些工具和实践来加密/解密这些文件?特别是,哪些工具使其易于自动化.
在官方的Puppet文档中,它说有两个链箭:https: //docs.puppetlabs.com/puppet/latest/reference/lang_relationships.html
- >(排序箭头) 使左侧的资源在右侧的资源之前应用.用连字符和大于号写的.
〜>(通知箭头) 首先应用左侧的资源,如果左侧资源发生更改,则向右侧的资源发送刷新事件.用波浪号和大于号的书写.
有人可以澄清这两者之间的区别吗?
是否可以将linux命令结果存储在变量中?
我试图将加密值存储在变量中.加密我正在使用base64命令.要将它存储在变量中,我使用的是generate方法.但我无法存储价值.
$secretvalue = generate("/bin/bash","-c","/usr/bin/echo ${password} | /usr/bin/base64")
Run Code Online (Sandbox Code Playgroud) 我正在构建一个自定义类型,我无法从defaultto块访问hiera范围
module Puppet
require 'puppet/parser/functions/hiera'
newtype(:my_type) do
ensurable
newparam(:myparam) do
defaultto { Puppet::Parser::Functions.hiera('myparam') }
end
newproperty(:value) do
desc "Value of the item."
end
end
end
Run Code Online (Sandbox Code Playgroud)
但我明白了
Error: undefined method `hiera' for Puppet::Parser::Functions:Module
Run Code Online (Sandbox Code Playgroud)
我实际上正在使用Puppet 3.8和未来的解析器
作为一种解决方法,我们使用
$my_vals = hiera_hash('mytype_vals')
create_resource(my_type, $myvals, {myparam => hiera('myparam')})
Run Code Online (Sandbox Code Playgroud)
这样可以正常工作,但是my_type期望在目录中的任何地方实例化对象,并且预期myparam所有实例中的对象都是相同的.因此,不需要多个默认值声明.
另一种方法是放置
My_type{
myparam => hiera('myparam')
}
Run Code Online (Sandbox Code Playgroud)
在节点清单中.这也可以解决问题,但我们正在开发一个模块,主要清单超出了我们的范围
我需要将一些文件安装到一个目录中,而这个目录本身并不是由Puppet管理的.在source每个文件的是在files/我的模块的子目录.
我想一次性安装它们,因为它们的所有权和权限都是一样的.但是我该怎么做source?我希望,只需指定目录即可:
file {[
"${rcdir}/foo", "${rcdir}/bar",
]:
source => "puppet:///${module_name}/",
group => 'wheel',
owner => 'root',
mode => '0644'
}
Run Code Online (Sandbox Code Playgroud)
但是,不幸的是,Puppet(在这里使用3.7.5)不够聪明,不能自动追加foo和bar适当的.
有没有一个很好的方法来做到这一点,还是我必须精心枚举每个文件?谢谢!
什么时候应该使用include与类声明?我现在正在探索创建一个概要文件模块,但是我在方法论和如何布局方面苦苦挣扎。
有一点背景知识,我正在使用puppet-labs java模块,可以在这里找到。
我的./modules/profile/manifests/init.pp看起来像这样:
class profile {
## Hiera Lookups
$java_version = hiera('profile::jdk::package')
class {'java':
package => $java_version,
}
}
Run Code Online (Sandbox Code Playgroud)
效果很好,但是我知道我也可以删除class {'java':代码块,而使用include java。我的问题与两件事有关。一个,如果出于任何原因要使用include语句,如何将软件包版本从hiera传递给它?第二,是否有首选的方法?是我确实不应该使用的东西,还是每种方法都有优点和缺点?
我的长期目标是为我的环境构建概要文件,例如模块。可能会有一个适用于所有服务器的默认配置文件,然后是适用于不同应用程序负载的配置文件。我可以将概要文件包含到角色中,然后将其应用于该级别的各个节点。这有意义吗?
谢谢!