我们如何编写一个puppet清单代码,用于标识服务(httpd)是否在puppet客户端/代理上运行.如果没有,它应该启动该服务并发送电子邮件?
class apache {
package { mysql-server: ensure => installed }
if hasstatus == "false" {
service { "mysql":
ensure => running,
require => Package["mysql-server"],
}
}
}
node default {
include apache
}
Run Code Online (Sandbox Code Playgroud)
我知道这不是一个正确的代码.但我想首先检查一下hasstatus,如果服务状态为false,那么我想开始服务并发送一封电子邮件.
谢谢Sanket Dangi
我已经在puppet master中配置了tagmail.conf,并且还启用了puppet报告但是无法接收到我的gmail帐户的邮件.我可以在puppet master上看到puppet agent报告,但是没有收到邮件.我需要为此配置邮件服务器吗?
My Tagmail Conf :
all: xxxxxxx@gmail.com
Run Code Online (Sandbox Code Playgroud) 是木偶模块的任何好资源?我需要一些东西用于nginx,清漆和zend-server ce,我敢肯定会在某个地方,我找不到它.
在此先感谢,Jaro.
你能想到在Puppet中解决这个问题的方法吗?
我有一个自定义事实,根据运行的域生成一串IP地址,它可以解析为有1到n个地址.
"10.1.29.1"
"10.1.29.1,10.1.29.5"
"10.1.29.1,10.1.29.5,10.1.29.7"
etc
Run Code Online (Sandbox Code Playgroud)
我想将这些添加到主机文件中,例如生成的服务器名称为servernameX;
10.1.29.1 myservername1
10.1.29.5 myservername2
10.1.29.7 myservername3
Run Code Online (Sandbox Code Playgroud)
所以你怎么能这样做,因为puppet没有像"for each"这样的数组迭代器?
有没有办法从/root/.ssh/authorized_keys自动导入所有现有的ssh密钥到puppet?例:
如果我在/root/.ssh/ssh_authorized_keys中有以下内容:
ssh-rsa AAAAakljsehrkjysdfjkhasdkfhskjghg== userA@hostA
ssh-rsa AAAAajklrkljeykljrsyehkrjryekjdkj== userB@hostB
Run Code Online (Sandbox Code Playgroud)
我想运行类似的东西:
puppet resource ssh_authorized_key
Run Code Online (Sandbox Code Playgroud)
并获得以下输出:
ssh_authorized_key {'userA':
ensure => present,
key => 'AAAAakljsehrkjysdfjkhasdkfhskjghg==',
type => 'ssh-rsa',
name => 'userA@hostA',
user => 'root',
}
ssh_authorized_key {'userB':
ensure => present,
key => 'AAAAajklrkljeykljrsyehkrjryekjdkj==',
type => 'ssh-rsa',
name => 'userB@hostB',
user => 'root',
}
Run Code Online (Sandbox Code Playgroud)
这有点可能吗?
我正在看一些Puppet代码,试着看看它是如何工作的,下面的Exec和File语句让我非常困惑,因为没有声明命令属性,也没有为文件闭包指定文件.
有人可以解释这是如何工作的吗?
case $operatingsystem {
CentOS, RedHat, OracleLinux, Ubuntu, Debian, SLES: {
$execPath = "/usr/java/${fullJDKName}/bin:/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:"
$path = $downloadDir
$beaHome = $mdwHome
$oraInventory = "${oracleHome}/oraInventory"
$oraInstPath = "/etc"
$java_statement = "java ${javaParameters}"
Exec { path => $execPath,
user => $user,
group => $group,
logoutput => true,
}
File {
ensure => present,
mode => 0775,
owner => $user,
group => $group,
backup => false,
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个hash哈希,我需要嵌入exec资源命令.我的想法是将序列化为hasha string并将其插入到exec中call.该exec调用将通过执行ruby代码ruby -e 'ruby code here'.
使用irb,我知道hash.to_s创建了一个可解析的单行版本hash.或者我可以使用json.我怀疑你可以打电话给to_s傀儡,但我不确定.
Puppet的stdlib有parseyaml和parsejson反序列化,但有没有办法序列化为可解析string?我可以编写一个自定义木偶函数来完成它,但如果有的话,我更喜欢已经内置的解决方案.
更新 我正在考虑定义一个木偶功能.我之前从未写过,所以我不确定语法.这是我的第一次尝试:
Puppet::Parser::Functions.newfunction(
:serialize_hash,
:arity => 2,
:doc => "Serialize a hash to any depth and optionally escape the double quotes.",
:type => :rvalue) do |args|
hash = args[0]
escape_quotes = args[1]
serialized = hash.to_s
if (escape_quotes)
serialized.sub!(/"/, "\\\"")
end
serialized
end
Run Code Online (Sandbox Code Playgroud) 我有一个现有的puppet清单,它安装了一堆php5软件包,只有在安装后才重新启动apache.简化的清单就像是
package { 'apache-php':
name => $modules,
ensure => installed
}
exec {'enable-mod-php':
command => $enable_cmd,
refreshonly => true
}
Package['apache-php'] ~> Exec['enable-mod-php'] ~> Service['apache']
Run Code Online (Sandbox Code Playgroud)
系统升级目录运行开始失败后出现以下错误消息:
错误:无法应用目录:包[apache-php]上的参数名称失败:名称必须是/etc/puppet/modules/apache/manifests/php.pp:22中的字符串而不是数组
我发现我使用了一个未记录的功能/ bug:Puppet 3.4.0名称作为包中的数组.
但是,我很难在升级后找到如何重做我的设置.我怎样才能重写这个清单,以便它适用于更新的木偶版本?
只是想知道我是否有以下puppet文件,我想将它们分成单独的文件.我必须创建模块吗?我不能只包括它们吗?
node default {
include mysql
}
class mysql {
# Make sure MySQL is ...
notify {"Mysql":}
# installed
package { 'mysql':
require => Exec['apt-update'], # require 'apt-update' before installing
ensure => installed,
}
# and running
service { 'mysql':
ensure => running,
enable => true,
}
}
...
Run Code Online (Sandbox Code Playgroud)
我只是想把mysql类拿出来放在单独的文件中.怎么做这个简单的事情?顺便说一句,我正在使用无主的木偶
编辑
很大的道歉,事实是我只使用没有流浪汉的傀儡.但由于我不是一个专家,当我的问题有一个修改,包括流浪汉我接受了它.对不起,请允许我修改我的问题
我可以在没有流浪汉的情况下进行分离吗?如果我必须如此.
谢谢
我正在读取人偶证书的默认到期日期是5年,并且可以使用中的属性ca_ttl进行设置puppet.conf。
我有两个问题,给出了许多连接到人偶主控器的代理的设置。
代理证书过期时会发生什么?它是在签入母版时自动创建一个新的,还是需要手动完成?
CA证书过期时会发生什么?设置是否完全断开,需要您通过SSH进入每个代理以删除过期的证书?
我正在尝试将基于时间(小时和分钟)的字符串转换为人偶中的整数。除分钟数少于10(例如08)外,它在大多数时间都可以正常工作。对于这些值,它将引发异常。
错误:评估错误:值'08'无法转换为数值。
使用的代码
$ minute_string = Timestamp.new.strftime(“%M”) #尝试以下操作,但不起作用 #$ minute_integer = $ minute_string + 0 #随后,尝试了以下操作,但还是没有用 $ minute_integer =整数($ minute_string)