我正在学习木偶并尝试在家里的虚拟机上进行试验.我还没有使用木偶服务器,只是在本地运行.它工作正常,但每次运行时puppet apply ...
,我都会延迟几秒钟,然后显示消息
warning: Could not retrieve fact fqdn
Run Code Online (Sandbox Code Playgroud)
我假设消息与延迟有关,我想摆脱它(延迟 - 我可以忍受消息).谷歌搜索解决方案似乎表明它与DNS查找有某种关系,但我真的找不到任何关于它的东西,这似乎令人惊讶.我想要的就是能够快速地在我的vm中应用清单,这样我就可以进行实验.我怎样才能加快速度?
更新:我没有在调试输出中看到任何额外的信息,但它看起来像这样:
$ puppet apply -dv puppet-1.pp
warning: Could not retrieve fact fqdn
debug: Failed to load library 'rubygems' for feature 'rubygems'
debug: Failed to load library 'selinux' for feature 'selinux'
debug: Puppet::Type::File::ProviderMicrosoft_windows: feature microsoft_windows is missing
...
Run Code Online (Sandbox Code Playgroud)
更新:我添加了"ruby"标签,因为木偶的粉丝很少.如果这不属于红宝石,或者您知道更好的标签,请告诉我.
再次更新:我已经了解了更多关于puppet的内容,我现在明白这条消息来自名为"Facter"的组件,该组件嗅出了关于运行Puppet的系统的"事实".我找到了一些配置选项,并使用"certname","node_name"和"node_name_value",但我无法让延迟消失.有没有人具体知道如何告诉Facter忽略fqdn或如何让Facter能够在Ubuntu 11.10 vm上找到fqdn?
进展:
$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
那是我的路由器,它通过Tomato运行Dnsmasq.
$ dig -x 192.168.1.129 192.168.1.1 …
Run Code Online (Sandbox Code Playgroud) 我刚刚将木偶环境升级3.4.2
为3.4.3
.通过puppetlabs的apt repos.我正在升级代理商和主人.执行代理程序运行会导致以下错误:
Info: Retrieving pluginfacts
Debug: Failed to load library 'msgpack' for feature 'msgpack'
Debug: file_metadata supports formats: pson yaml b64_zlib_yaml raw
Debug: Failed to load library 'msgpack' for feature 'msgpack'
Debug: file_metadata supports formats: pson yaml b64_zlib_yaml raw
Error: /File[/var/lib/puppet/facts.d]: Could not evaluate: Could not retrieve information from environment production source(s) puppet://<puppetserver>/pluginfacts
Debug: Finishing transaction [...]
Run Code Online (Sandbox Code Playgroud)
尽管如此,我从master中检索了一个目录,因此代理程序运行仍然有效并且似乎可以执行它应该执行的操作.(或者说,如果出现与错误消息相关的错误,我实际上无法确定.)
但是,我想摆脱错误消息.
我puppet --version
在 …
我正在尝试设置一个木偶节点,但rubygems似乎没有表现.
如果我通过它自己的二进制文件(/usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter)在cli上运行facter,它运行正常,但如果我通过安装的二进制文件运行它rubygems(/ usr/bin/facter),它抛出:
/usr/lib/ruby/1.8/facter/uptime.rb:11: undefined method `get_uptime' for Facter::Util::Uptime:Module (NoMethodError)
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:73:in `load'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:73:in `load_file'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:38:in `load_all'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:33:in `each'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:33:in `load_all'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:30:in `each'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/loader.rb:30:in `load_all'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter/util/collection.rb:90:in `load_all'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/lib/facter.rb:95:in `to_hash'
from /usr/lib/ruby/gems/1.8/gems/facter-1.5.8/bin/facter:137
from /usr/bin/facter:19:in `load'
from /usr/bin/facter:19
Run Code Online (Sandbox Code Playgroud)
我已经尝试删除rubygems并重新安装以及重新安装gem,但似乎没有任何效果.
我假设某些东西被缓存在某个地方,因为当我试图运行木偶时它会抛出同样的错误.
有任何想法吗?
我正在考虑收集服务器数据,并在那些服务器中预安装Python 2.6.现在我想知道是否有Python库对应Ruby的"facter",而不是Python的"绑定"因为facter.
我用Google搜索但却找不到任何东西.有没有人对此有任何想法?
尝试编写自定义facter模块:
Facter.add("something_status") do
setcode do
$string_to_parse = Facter::Util::Resolution.exec('somecommand --print ')
... do something to string
return something-new
end
end
Run Code Online (Sandbox Code Playgroud)
对ruby来说很新...用这个做什么的正确语法是什么?
我是 puppet 的新手,并计划在我们的环境中实施它。
我有在不同版本的 Redhat 上运行的傀儡代理。
现在,我打算从 puppet master 推送 repo 文件,我需要你的指导来实现它。
我有以下清单。
file { 'local_repo':
ensure => file,
path => '/etc/yum.repos.d/local.repo',
mode => "600",
source => 'puppet:///modules/repo/rhel7.1',
}
file { 'local_repo':
ensure => file,
path => '/etc/yum.repos.d/local.repo',
mode => "600",
source => 'puppet:///modules/repo/rhel6.7',
}
Run Code Online (Sandbox Code Playgroud)
当我执行 Factor CLI 时,我得到以下输出。
[root@dheera ~]# facter os
{
architecture => "x86_64",
family => "RedHat",
hardware => "x86_64",
name => "RedHat",
release => {
full => "7.2",
major => "7",
minor => "2"
}
} …
Run Code Online (Sandbox Code Playgroud) 假设我有一个值数组
["node1.example.org", "node2.example.org"]
Run Code Online (Sandbox Code Playgroud)
我想使用 facter 传递它,并在 puppet 中使用它:
host {
$nodes:
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我正在使用puppet从facter中读取一个事实,并基于此我将不同的配置应用于我的模块.
傀儡代理人没有看到这个事实.以puppet agent --test
交互方式运行按预期工作.即使从脚本非交互式运行它似乎工作正常.只有代理商本身搞砸了.
我正在EC2上部署基于Ubuntu的应用程序堆栈.使用userdata(#cloud-config),我在/ etc/environment中设置了一个环境变量:
export FACTER_tl_role=development
Run Code Online (Sandbox Code Playgroud)
然后立即在#cloud-config,i source/etc/environment中.只有那时我才得到安装木偶(我放弃了使用包:木偶来消除#cloud-config步骤序列中的歧义)
一旦实例启动,我确认事实是可用的:运行facter tl_role
返回"开发".然后检查/ var/log/syslog,显然木偶代理没有看到这个事实 - 我知道这是因为它无法编译目录,并且没有什么(空白)我应该看到它的价值变量集取决于这个事实.
但是,以puppet agent --test
交互方式运行编译并运行目录就好了.甚至从#cloud-config脚本(安装puppet后立即运行)也可以正常运行.
如何向傀儡代理人提供此事实?重新启动代理服务没有任何区别,它仍然没有意识到自定义事实.重新启动实例也没有任何区别.
这是一些代码:
EC2用户数据:
#cloud-config
puppet:
conf:
agent:
server: "puppet.foo.bar"
certname: "%i.%f"
report: "true"
runcmd:
- sleep 20
- echo 'export FACTER_tl_role=development' >> /etc/environment
- . /etc/environment
- apt-get install puppet
- puppet agent --test
Run Code Online (Sandbox Code Playgroud)
主要木偶清单:
# /etc/puppet/manifests/site.pp
node default {
case $tl_role {
'development': { $sitedomain = "dev.foo.bar"}
'production': { $sitedomain = "new.foo.bar"}
} …
Run Code Online (Sandbox Code Playgroud) 我想从hiera读取我的自定义因子的值.可能吗 ?
我将根据我的hiera值填充一个因子.请查看以下代码供您参考.
require 'facter'
# Default for non-Linux nodes
Facter.add(:jboss_base_algorithm) do
setcode do
nil
end
end
# Linux
#
Facter.add(:jboss_base_algorithm) do
confine :kernel => :linux
setcode do
Facter::Util::Resolution.exec("/usr/bin/echo '{hiera_value}' | /usr/bin/base64")
end
end
Run Code Online (Sandbox Code Playgroud)
任何帮助深表感谢.