我想使用 pm2 在单个服务器上运行 2 个 node.js 应用程序,这些应用程序需要通过 puppet 进行部署。请您告知这是否可能。
问候,巴拉
我正在用 Python 生成 puppet hieradata yml 文件。
我想用 Python 实现以下 Ruby 代码...
public_key_pem = File.read(puppet_key_file)
@public_key_x509 = OpenSSL::X509::Certificate.new( public_key_pem )
@cipher = OpenSSL::Cipher::AES.new(256, :CBC)
ciphertext = OpenSSL::PKCS7::encrypt([@public_key_x509],
plaintext,
@cipher,
OpenSSL::PKCS7::BINARY
).to_der
"ENC[PKCS7,#{Base64.encode64(ciphertext).gsub("\n", '')}]"
Run Code Online (Sandbox Code Playgroud)
在另一个模块中,我正在使用 PyOpenssl 处理证书签名和密钥生成,但我注意到加密方法没有实现......
M2Crypto 的潜在解决方案...
from M2Crypto import SMIME, X509, BIO
def encrypt(self, plaintext):
"""
Encrypt a string using the previously generated public key AES-256-CBC, SMIME PKCS7 envelop
:param plaintext: The text to encrypt
:type plaintext: str
:returns: The encrypted text
:rtype: str
"""
buf = BIO.MemoryBuffer(plaintext) …Run Code Online (Sandbox Code Playgroud) 我在我的木偶架构中使用 SRV 解决方案。当尝试设置新的 puppet master 和 CA 并查看我的证书时,我收到此错误:
puppetserver ca list --all
Fatal error when running action 'list'
Error: Failed connecting to https://puppet:8140/puppet-ca/v1/certificate_statuses/any_key
Root cause: Failed to open TCP connection to puppet:8140 (getaddrinfo: No address associated with hostname)
Run Code Online (Sandbox Code Playgroud)
我的 puppet.conf 文件具有以下配置:
use_srv_records = true
srv_domain = mypuppetrecord.com
Run Code Online (Sandbox Code Playgroud)
我缺少什么?
刚刚开始使用Puppet,我的第一个模板出现问题.它应该很容易,但我无法弄清楚.
我有一个模块"基地"
/etc/puppet/modules/base/
./manifests
./manifests/service.pp
./manifests/init.pp
./manifests/params.pp
./manifests/config.pp
./manifests/install.pp
./templates
./templates/puppet.conf.erb
Run Code Online (Sandbox Code Playgroud)
还有其他的东西,但没有必要.
碱/舱单/ init.pp:
class base {
include base::install, base::service, base::config, base::params
}
Run Code Online (Sandbox Code Playgroud)
碱/舱单/ config.pp
class base::config {
include base::params
File {
require => Class["base::install"],
ensure => present,
owner => root,
group => root,
}
file { "/etc/puppet/puppet.conf":
mode => 0644,
content => template("base/puppet.conf.erb"),
require => Class["base::install"],
nofity => Service["puppet"],
}
...
Run Code Online (Sandbox Code Playgroud)
碱/舱单/ params.pp
class base::params {
$puppetserver = "pup01.sdirect.lab"
}
Run Code Online (Sandbox Code Playgroud)
最后是base/templates/puppet.conf.erb中模板的有趣部分
...
server=<% puppetserver %>
Run Code Online (Sandbox Code Playgroud)
错误消息:
错误:无法解析模板base/puppet.conf.erb:无法在节点上的/etc/puppet/modules/base/manifests/config.pp:13找到'puppetserver'的值...
我不知道问题是什么.我直接从Pro Puppet书中复制了这部分内容. …
我已经查看了puppet变量的文档,似乎无法理解如何将其应用于以下情况:
if vagrant (local machine)
phpfpm::nginx::vhost { 'vhost_name':
server_name => 'dev.demo.com',
root => '/vagrant/public',
}
else if aws ec2 (remote machine)
phpfpm::nginx::vhost { 'vhost_name':
server_name => 'demo.com',
root => '/home/ubuntu/demo.com/public',
}
Run Code Online (Sandbox Code Playgroud)
谢谢
我有以下puppet模板文件solr.json.erb:
{
"servers" : [ {
"port" : "<%= jmx_port %>",
"host" : "localhost",
"queries" : [
<% @markets.each do |market| -%>
{
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
} ],
"obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache",
"attr" : [ "hits","hitratio"]
},
<% end -%>
],
"numQueryThreads" : 2
} ]
}
Run Code Online (Sandbox Code Playgroud)
我想在puppet中执行此测试之前测试将模板应用于某些测试参数的结果.
我怎样才能做到这一点?
之前,我试过像这样的脚本,my_script.ruby
require 'erb'
require 'ostruct'
namespace = OpenStruct.new(:jmx_port => 9200, :markets=> ['CH', 'FR'])
template = File.open("solr.json.erb", "rb").read;
puts ERB.new(template).result(namespace.instance_eval { binding })
Run Code Online (Sandbox Code Playgroud)
但它没有成功,因为OpenStruct没有instance variables,所以我无法使用 …
我按照此处的说明在Ubuntu Server 12.04上安装了The Foreman:
http://theforeman.org/manuals/1.2/quickstart_guide.html#Installation
我现在已经决定它不适合我 - 但我找不到有关如何卸载的任何说明.宝石卸载工头等各种命令失败,因为它似乎是作为宝石安装的.
任何帮助将不胜感激.谢谢,克里斯蒂亚诺
我有一个工作的puppet配置来帮助在机器上安装mysql实例.我的环境设置为在同一台机器上运行多个实例(具有不同的配置/端口/等).
我在清单中的基本设置看起来像
File{
owner => $owner,
group => $group,
before => Exec["mysql_install_db-${name}"],
}
exec{"mysql_install_db-${name}":
creates => "/var/lib/mysql/${name}/mysql",
command => "/usr/local/percona/mysql-${version}/usr/bin/mysql_install_db --user=mysql --datadir=/var/lib/mysql/${name} --basedir=/usr/local/percona/mysql-${version}/usr",
logoutput => true,
}
Run Code Online (Sandbox Code Playgroud)
这非常好用,但是现在我想修改这个安装过程来运行一些后续命令,用一些内部存储过程来引导全新安装,并为新安装做一些其他的"准备工作".
命令基本上就像
mysql -u user < /path/to/bootstrap1.sql
mysql -u user < /path/to/bootstrap2.sql
mysql -u user < /path/to/bootstrap3.sql
Run Code Online (Sandbox Code Playgroud)
我只希望这些运行一次,在mysql_install_db命令之后,但有点在同一"创建"后卫.
我发现了一些只是将数组传递给命令参数的引用,但该引用的形式是错误报告并不总是一致地工作.
什么是首选的方法来完成这样的事情,并确保命令以确定的顺序执行,并且只有在运行mysql_install_db之后?
我正在将系统一键部署到Ubuntu机器上.刚刚开始使用Puppet.看来,为了让我使用外部模块,我必须使用类似的东西预先安装它们
puppet module install foo
Run Code Online (Sandbox Code Playgroud)
问题:
这是一个独立的木偶设置(所以不是主从的木偶).我将不得不为不同的客户多次重复这一点.因此,有一个按钮为我完成所有工作将是很好的.在后期阶段,有一个主从设置的地方.但它必须对每个客户都是独立的.
如果puppet文件中不存在目录,如何执行命令?
exec { "my_exec_task":
command => "tar zxf /home/user/tmp/test.tar.gz",
unless => "test -d /home/user/tmp/new_directory",
path => "/usr/local/bin/:/bin/",
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:"无法评估:无法找到命令'test'".这也是检查目录是否不存在的最佳做法?
puppet ×10
ruby ×3
amazon-ec2 ×1
ca ×1
deployment ×1
encryption ×1
erb ×1
mysql ×1
node.js ×1
pm2 ×1
python ×1
srv ×1
theforeman ×1
ubuntu ×1
vagrant ×1