我致力于在 vagrant 管理的虚拟机上配置 CQ5。配置是使用 puppet 完成的。我对人偶清单文件中类/资源的执行顺序有疑问。
请在下面找到清单文件 cqsite.pp
include java
include apache
cq::instance {myauthor:
installation_type => author,
}
cq::instance {mypublish:
installation_type => publish,
}
Run Code Online (Sandbox Code Playgroud)
在供应期间,puppet 最初选择 cq 资源(cq::instance)而不是 java。但是必须先安装 java 才能执行 cq::instance.pp 文件中的几个命令。所以它抛出一个错误。请帮我找到解决方案
我有一个新安装的 Puppet 服务器,只配置了一个模块和一个托管客户端。
这是一个 MOTD 模块,看起来像这样:
class motd {
file { "/etc/custom_motd.sh":
path => '/etc/custom_motd.sh',
ensure => present,
owner => "root",
group => "root",
mode => "775",
content => template('motd/custom_motd.sh.erb'),
#require => Class['nagios_client'],
}
# file_line { 'enable motd':
# ensure => present,
# line => '/etc/custom_motd.sh',
# path => '/etc/profile',
# require => File['/etc/custom_motd.sh']
# }
}
Run Code Online (Sandbox Code Playgroud)
当我puppet agent -t在客户端上运行时,我得到了正确的结果:
[root@pnd01 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for pnd01.company.com
Info: …Run Code Online (Sandbox Code Playgroud) 我正在使用来自camptocamp/puppet-nagios的以下示例清单:
node 'central_monitoring_server' {
import "nagios"
$nagiosadmin_password = "XXXX"
...
include apache::base
include nagios::base
include nagios::nsca::daemon
include nagios::webinterface
}
Run Code Online (Sandbox Code Playgroud)
但是我有警告:
警告:nagios.pp 中不推荐使用“import”。请参阅http://links.puppetlabs.com/puppet-import-deprecation
我已经按照链接说:
新用户应避免使用该
import关键字,现有用户应停止使用该关键字。相反,请执行以下操作:
- 要将节点定义保存在单独的文件中,请指定一个目录作为主清单。
- 要加载类和定义的类型,请使用模块。
这两个功能一起完全取代了导入。
然而,这并不清楚我实际上应该做什么。
我可以只使用include关键字而不是import作为:
include nagios
Run Code Online (Sandbox Code Playgroud)
这就是全部?那应该以同样的方式工作吗?
我正在使用木偶 v3.7.4。
我们使用 puppet 来分发我们自己的软件(即我们写的东西,我们希望在我们自己的服务器上运行)。所以我们必须在某个地方编译这个软件。
对我来说,我可以 git pull 并在 puppet master 上编译它是有道理的。编译一次,分发,我们的机器是同构的,二进制文件在它们的受膏主机上运行。
但是当我们升级主机时,各种库都会发生变化,我们会发现自己需要为新的库集重新编译。
似乎正确的做法是打包我们的软件,为我们自己提供这些 deb,然后在 puppet 中使用包指令。
Q1:这听起来对吗/我错过了什么重要的事情吗?
Q2:那么deb是如何打包上传的呢?这是手动发布过程吗?这意味着我们将测试服务器升级到新的操作系统和库版本以进行编译和打包。
Q2B:现在假设我安装了 CI 服务器,我一直告诉我的团队我会开始安装。据我所知,CI 服务器对 dist-upgrades 一无所知。那么这部分是否必须保持手动?
试图构造一个字符串。
我可以:
"Blah blah ${::osfamily} blah blah"
"Blah blah ${$::osfamily} blah blah"
但是用变量作为参数调用函数并进行字符串插值工作的语法是什么?
以下均无效:
"Blah blah ${downcase($::osfamily)} blah blah"
"Blah blah ${downcase($osfamily)} blah blah"
"Blah blah ${downcase(::osfamily)} blah blah"
"Blah blah ${$downcase(osfamily)} blah blah"
"Blah blah ${$downcase($osfamily)} blah blah"
等等。
我得到的是:
Error 400 on SERVER: Syntax error at '('; expected ')'
这在 Puppet 语言中是可能的吗?
鉴于这些文件:
# find /etc/puppetlabs/code -type f | grep -v modules | xargs head -n 100
==> /etc/puppetlabs/code/environments/production/hieradata/common.yaml <==
pgwatch:
password: "mypass1"
puppetdb:
password: "mypass2"
==> /etc/puppetlabs/code/environments/production/manifests/site.pp <==
node "todd.ca.seevibes.com" {
class { 'postgresql::globals':
encoding => 'UTF-8',
locale => 'en_US.UTF-8',
manage_package_repo => true,
version => '9.1',
} -> class{'postgresql::server':
} -> postgresql::server::db{'puppetdb':
user => 'puppetdb',
password => postgresql_password('puppetdb', hiera('puppetdb::password')),
} -> postgresql::server::db{'pgwatch':
user => 'pgwatch',
password => postgresql_password('pgwatch', hiera('pgwatch::password')),
}
postgresql::server::pg_hba_rule{'allow pgwatch from anywhere':
address => '0.0.0.0/32',
auth_method => 'md5',
database …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用文件资源复制文件。我的代码如下:
node 'Node-002' {
file { "/root/helloworld.txt":
ensure => file,
owner => "root",
group => "root",
mode => "0644",
source => "puppet://modules/templates/${fqdn}/hosts.erb",
}
}
Run Code Online (Sandbox Code Playgroud)
但它因以下错误而失败
Error: /Stage[main]/Main/Node[Node-002]/File[/root/helloworld.txt]: Could not evaluate: Could not retrieve information from environment production source(s) puppet:///modules/templates/Node-002.example.com/hosts.erb
Run Code Online (Sandbox Code Playgroud)
模板位置如下:
ls -l /apps/wps/puppetlabs/code/environments/production/modules/templates/Node-002.example.com/hosts.erb
-rw-r--r-- 1 puppet puppet 462 Jul 20 02:13 /apps/wps/puppetlabs/code/environments/production/modules/templates/Node-002.wiley.com/hosts.erb
Run Code Online (Sandbox Code Playgroud)
即使我在source参数中给出完整路径,它也会因相同的错误而失败。
我正在使用木偶 4.5.4
请建议
我已经安装了puppet服务器和代理,在sudo /opt/puppetlabs/bin/puppetserver ca sign --certname mywindowshost服务器上接受初始代理请求。
我可以看到证书放置在下面并存在于服务器根 ca 和代理的证书中:
C:\Windows\system32>puppet agent --configprint localcacert
C:/ProgramData/PuppetLabs/puppet/etc/ssl/certs/ca.pem
Run Code Online (Sandbox Code Playgroud)
但是,在代理上运行以下命令来测试它,我得到以下结果:
C:\Windows\system32>puppet agent --test
Warning: Unable to fetch my node definition, but the agent run will continue:
Warning: SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Info: Retrieving pluginfacts
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/facts.d]: Failed to generate additional resources using 'eval_generate': SSL_connect returned=1 errno=0 state=error: certificate verify failed: [unable to get issuer certificate for /CN=Puppet CA: puppet.mydomain.com]
Error: /File[C:/ProgramData/PuppetLabs/puppet/cache/facts.d]: …Run Code Online (Sandbox Code Playgroud) 我的 Puppet 安装中有一个依赖循环,我需要帮助解决。
我有一个更新 /etc/puppet/puppet_client.conf 文件的 Puppet 服务器。这是通过 erb 模板部署的。该模板包括设置 'pluginsync=true' 选项。
我还在不同的模板中使用自定义事实。这两个(以及更多)都作为我的核心 Linux 模板的一部分应用。
在新添加的服务器上,我收到一个不存在的事实的失败,并且在对 puppet 配置进行更改之前停止执行。如果我手动添加 pluginsync 选项,一切都是犹太洁食。
我如何在 Puppet 中解决这个问题?有什么方法可以强制执行此操作、依赖项等吗?
我有一个脚本,实际上只需要在服务器上运行一次,即在部署时,但认为最好让 Puppet 管理它。该脚本重新映射了与本地系统用户冲突的几个旧用户 ID。
我检查的方法是 gopher 用户的默认 uid 是否为 13。如果是,那么我需要运行我的重新映射脚本。
exec { "change_uid":
command => "/script/to/run.sh",
provider => 'shell',
path => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
onlyif => "test `/usr/bin/id -u gopher` -eq 13; echo $?",
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上述onlyif检查的几种不同排列,但是 exec 总是在代理上被解雇。
当我直接在命令行中运行该命令,它返回0或1,这可能涉及到的事实,庆典返回0,当真正和1时,假的,但我认为它更可能是我误解的方式onlyif工作.
当 gopher 的 uid=13 时,我怎么能有这个 exec 火?我愿意采用其他方法来实现我在这里尝试完成的工作。
更新
我放弃了回声部分。最终的工作解决方案是:
exec { "change_uid":
command => "/script/to/run.sh",
path => [ "/bin", "/sbin", "/usr/bin", "/usr/sbin", "/usr/local/bin", "/usr/local/sbin" ],
onlyif => "test `id -u …Run Code Online (Sandbox Code Playgroud)