我在主 -> 代理模型中使用 Puppet。我的清单存储在主服务器上,作为快速测试,我puppet agent -t在代理上执行以触发 Puppet 运行。
随着时间的推移,我的清单已经变得相当大,我正在寻找只执行单个类的能力mycompany.someclass.class
我尝试了一些基于谷歌搜索的变体,但没有一个有效
傀儡代理--标签 mycompany.someclass.class 傀儡代理--标签“mycompany.someclass.class” 傀儡代理--tags Mycompany.Someclass.Class 傀儡代理-t --tags“Mycompany.Someclass.Class” 傀儡代理-t --tags Mycompany.Someclass.Class 傀儡代理--tags Mycompany.Someclass.Class puppet apply --tags mycompany.someclass.class 傀儡应用--标签Mycompany.Someclass.Class
尝试编写自定义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来说很新...用这个做什么的正确语法是什么?
我正在尝试实现这里找到的配方https://github.com/puppetlabs/puppetlabs-firewall#readme,我似乎正在制造一个我看不到的新手木偶错误.我有一个名为mwsettings的模块本身可以找到(mwsettings/init.pp存储一个帮助程序,用于加载一些模板并且可以正常工作),但是我的site.pp中的以下代码
Firewall {
notify => Exec['persist-firewall'],
before => Class['mwsettings::postfirewall'],
require => Class['mwsettings::prefirewall'],
}
Run Code Online (Sandbox Code Playgroud)
爆发了
Error: Failed to apply catalog: Could not find dependency Class[Mwsettings::Prefirewall] for Firewall[100 accept mysql - XXXXXXXX]
Run Code Online (Sandbox Code Playgroud)
当我的代码稍后在site.pp调用时
firewall { "100 accept mysql - $name":
proto => 'tcp',
action => 'accept',
dport => 3306,
source => $name,
}
Run Code Online (Sandbox Code Playgroud)
但是,看起来我已经为prefirewall正确设置了清单:
# cat modules/mwsettings/manifests/prefirewall.pp
class mwsettings::prefirewall {
Firewall {
require => undef,
}
<snip>
Run Code Online (Sandbox Code Playgroud)
我在这里错过了一些非常微不足道的东西吗?因为这是我的第一个有木偶的牛仔竞技表演,所以我甚至都不确定如何调试它.
谢谢!
我正在使用Supervisord运行虚拟机来启动和维护几个重要的后台进程.我使用vagrant和virtualbox创建虚拟机,并使用puppet进行配置.当机器启动时,supervisord会抓取/etc/supervisor/conf.d中的所有.conf文件并尝试运行它们.不幸的是,当我跑
Vagrant up
Run Code Online (Sandbox Code Playgroud)
在共享同步文件夹之前,supervisord立即开始尝试在conf.d中运行文件.因此,启动一些像Xvfb这样的后台进程运行得很好,但启动我的统计跟踪器(位于同步文件夹中)是不可能的.事实上,我在supervisord日志中看到多次尝试启动该进程,抱怨它无法找到该文件,最后放弃了.然后,一旦机器完全运行,我可以SSH并在.conf文件中运行完全相同的命令并自己启动该过程.
我创建了一个中间脚本来连续循环,等待同步文件夹变为可用,然后启动我想要的进程.但在这种情况下,主管没有办法确保流程继续运行,而且感觉就像是黑客攻击.
有更清洁的方法吗?也许来自傀儡或流浪汉?
我正在尝试实现hiera合并.希尔是我的hiera.yaml
---
:hierarchy:
- fqdn/%{fqdn}
- roles/%{role}
- os/%{osfamily}
- common
:backends:
- yaml
# options are native, deep, deeper
:merge_behavior: deeper
:yaml:
:datadir: /etc/puppet/environments/%{environment}/data
Run Code Online (Sandbox Code Playgroud)
然后我有:common.yaml
---
classes:
- a
- b
Run Code Online (Sandbox Code Playgroud)
和fqdn/some.host.yaml
---
classes:
- c
- d
Run Code Online (Sandbox Code Playgroud)
赛跑
hiera --debug -c /etc/puppet/hiera.yaml classes fqdn=some.host environment=development
["c", "d"]
Run Code Online (Sandbox Code Playgroud)
和
hiera --debug -c /etc/puppet/hiera.yaml classes fqdn=blablahost environment=development
["a", "b"]
Run Code Online (Sandbox Code Playgroud)
所以"blablahost"采取common.yaml并应用"a"和"b"类..但是fqdn = some.host应该应用a,b,c,d ..而不仅仅是c,d ...什么是我做错了?
问候
我可以通过两种方式在Puppet中显示自定义消息
notice("My extra information as a function")
Run Code Online (Sandbox Code Playgroud)
或者
notify{"My extra information as a resource":}
Run Code Online (Sandbox Code Playgroud)
共通的地方:
不同的事情:
notify可以设置为虚拟或出口资源,具有重要的意义,这是不可用noticenotice无法显示主叫路(没有withpath => true)notice有一个姐妹功能fail,它有能力使清单编译失败.notify不能那样做,因为它在编译完成后就开始工作了.我有一种感觉,我错过了重要方面,或者在某些方面我错了.Puppet比我更好的人会填写更多细节吗?
是否有可能转换Boolean变量String中Puppet?我想在替换字符串时使用它.我可以使用条件语句,但也许没有必要.
$variable = true
$my_string = "status _"
$string = regsubst($my_string, '_', $variable)
Run Code Online (Sandbox Code Playgroud)
像这样的东西
如果我在自己的木偶模块中有两个类,而'b'类依赖于类'a'.我怎样才能在require声明中表达这一点:
# a.pp
class rehan::a {
package { 'javaruntime':
ensure => latest,
provider => chocolatey
}
}
# b.pp
class rehan::b {
file { 'C:\foo':
ensure => present,
require => Package['?????']
}
}
# site.pp
node default {
include rehan::a
include rehan::b
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Puppet进行我的Vagrant配置.我使用https://forge.puppet.com/puppet/archive/types上的归档模块来下载和提取这样的glassfish:
archive { '/tmp/glassfish-4.1.1.zip':
ensure => present,
extract => true,
extract_path => '/opt/',
source => 'http://download.java.net/glassfish/4.1.1/release/glassfish-4.1.1.zip',
cleanup => true,
creates => '/opt/glassfish4',
}
Run Code Online (Sandbox Code Playgroud)
应用该资源后,我想将文件移动到新创建的glassfish目录中
file { 'domain.xml':
ensure => file,
path => '/opt/glassfish4/glassfish/domains/domain1/config/domain.xml',
source => 'puppet:///modules/glassfish/domain.xml',
}
Run Code Online (Sandbox Code Playgroud)
我想在文件移动资源中要求提取已经完成,因为提取不是创建文件,而是创建目录.就像是
require => FILE['..']
Run Code Online (Sandbox Code Playgroud)
不管用.
我有一个代理/主设置。我创建了一个新的环境,/etc/puppetlabs/code/environments/所谓master。
的内容environment.conf为master目录环境
modulepath = site:modules:$basemodulepath
manifest = manifests/site.pp
Run Code Online (Sandbox Code Playgroud)
当我尝试puppet agent -t --environment master时出现一些错误
Notice: Local environment: 'master' doesn't match server specified node environment 'production', switching agent to 'production'.
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for node1.localpuppet.com
Info: Applying configuration version '1490712072'
Notice: Applied catalog in 0.67 seconds
Run Code Online (Sandbox Code Playgroud)
我是木偶新手。我需要什么改变?