例如,让我们尝试让 Puppet安装 opengeo-suite。
做类似的事情
wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -
echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" >> /etc/apt/sources.list
我们可以用
exec {'getKey':
command => "wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -",
}
exec {'addRepo':
command => "echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" >> /etc/apt/sources.list",
}
问题 1:如果我们再次运行 puppet 脚本,wget 和 echo 不会运行两次吗?我们最终会在 中得到重复的 repo /etc/apt/sources.d
。运行package { "opengeo-suite": }
两次并不会尝试安装包两次,它只是确保包已安装。
问题2:确实apt-get install opengeo-suite
有多个提示用户输入。Puppet 是否会以某种方式知道要使用的默认输入,还是会崩溃?
答案1
答案2
您可以在 exec 中使用 onlyif。测试必须返回 true 才能执行命令,在您的例子中请参见下文(PUBLIC_KEY_ID 是 apt 提供商的密钥 ID)
exec {'getKey':
command => "wget -qO- http://apt.opengeo.org/gpg.key | apt-key add -",
onlyif => "test `apt-key list |grep PUBLIC_KEY_ID | wc -l ` -eq 0"
}
exec {'addRepo':
command => "echo "deb http://apt.opengeo.org/suite/v3/ubuntu lucid main" /etc/apt/sources.list",
onlyif => "test `grep http://apt.opengeo.org/suite/v3/ubuntu /etc/apt/sources.list | wc -l ` -eq 0"
}