我有两台运行不受支持的古老版本的Linux的关键服务器,目前还没有针对它们的灾难计划。 我想为他们build立一个备份系统,并能够制定一个愚蠢的灾难计划。 服务器不能closures,因此冻结它们以获得快照,或复制是不可能的。 我看着厨师和傀儡,我不知道这些是否值得一试。 我想听听build议。
我们在这里资源有限,希望我们的qa和临时环境在一台机器上。 我们将运行单独的二进制文件,并为我们的应用程序和支持服务进行configuration。 根据厨师文档,可能有一台机器是两个节点。 它从来没有解释如何。 非常感激!
我有一个厨师食谱,我想要采取节点['cfn'] ['环境']下的所有属性,并将它们写入一个yml文件。 我可以做这样的事情(工作正常): content = { "environment_class" => node['cfn']['environment']['environment_class'], "node_id" => node['cfn']['environment']['node_id'], "reporting_prefix" => node['cfn']['environment']['reporting_prefix'], "cfn_signal_url" => node['cfn']['environment']['signal_url'] } yml_string = YAML::dump(content) file "/etc/configuration/environment/platform.yml" do mode 0644 action :create content "#{yml_string}" end 但我不喜欢我必须明确列出属性的名称。 如果后来我添加一个新的属性,它会很好,如果它自动包含在写出的XML文件。 所以我尝试了这样的事情: yml_string = node['cfn']['environment'].to_yaml 但是因为节点实际上是一个Mash,所以我得到了一个像这样的platform.yml文件(它包含了许多我不想要的意外嵌套): — !ruby/object:Chef::Node::Attribute normal: tags: [] cfn: environment: &25793640 reporting_prefix: Platform2 signal_url: https://cloudformation-waitcondition-us-east-1.s3.amazonaws.com/… environment_class: Dev node_id: i-908adf9 […]
我有一个目录结构(样本数据),我想从厨师食谱中复制。 似乎唯一的方法是明确创build每个单独的目录和文件: directory "/mnt/data/experiment1/dataset1" do recursive true only_if { node.chef_environment == "dev" } end directory "/mnt/data/experiment1/dataset2" do recursive true only_if { node.chef_environment == "dev" } end directory "/mnt/data/experiment2/dataset1" do recursive true only_if { node.chef_environment == "dev" } end directory "/mnt/data/experiment1/dataset2" do recursive true only_if { node.chef_environment == "dev" } end cookbook_file "/mnt/data/experiment1/dataset1/testfile1.txt" do owner "atom" […]
假设你有一个标准的Chef仓库,目录如下: cookbooks data_bags environments roles 有办法一次上传吗? 否则,你必须这样做: knife cookbook upload -a knife data bag from file data_bags/*.json knife environment from file environments/*.rb knife role from file roles/*.json 也许有第三方工具来做这种事情?
我在食谱中有以下几行 service "apache" do action :stop end # Do something.. service "apache" do action :start end 我发现第二个块没有执行。 任何原因?
厨师独奏缺乏环境支持似乎颇具争议。 一方面,环境的一个特点就是能够将烹饪书钉到特定的环境,而这对于厨师独奏来说绝对没有意义。 另一方面,我们很多人希望能够在环境级别的属性中进行合并,并在使用Vagrant进行testing时使用环境特定的运行列表。 我想我可能find了一个简单的方法来解决这个问题。 假设我在我的所有环境和angular色中都使用了JSON语法,并且遵循以下约定来设置属性(从最低到最高的优先级): 默认在食谱属性文件中 在angular色文件中默认 在环境文件中覆盖 看起来我可以自己parsing这些文件,并使用-j选项将属性注入到chef-solo中。 例如,我可以在我的Vagrantfile中做这样的事情: chef_env_conf = parse_json("./environments/#{ENV['CHEF_ENVIRONMENT']}.json") chef.json = chef_env_conf["override_attributes"] 由于通过-j选项设置的属性是以正常的优先级应用的 ,所以这可以成为覆盖angular色默认值的另一种方式,并且这可能是在环境未被自动拉入的上下文中所需的全部。 你可以做类似的事情来获得每个环境的运行列表(通过parsingangular色文件): chef_role_conf = parse_json("./roles/#{role}.json") chef.run_list = chef_role_conf["env_run_lists"][ENV['CHEF_ENVIRONMENT']] 我意识到这不是最优雅的黑客,但它似乎可能是一些人可行的解决scheme。 有谁认为这是一个非常糟糕的主意?
问题 。 遵循命令行 knife bootstrap 127.0.0.1 -r 'recipe[chef-client]' -x user -p password –sudo 回报 Bootstrapping Chef on 127.0.0.1 WARNING: Failed to connect to 127.0.0.1 — Errno::ECONNREFUSED: Connection refused – connect(2) 预计这个命令将会成功并在之后 knife node list 将返回 [ "127.0.0.1" ] SSH服务器在localhost上工作正常,并且ssh [email protected] -p password按预期工作。
我想尽可能便宜地设置厨师服务器,同时留出足够的空间来运行而不会崩溃。 我在这个主题上发现的唯一一篇文章警告说,由于内存不足,RabbitMQ会在微型实例上崩溃。 问题是:考虑到我的应用程序中没有使用CouchDB或RabbitMQ,所以最便宜的EC2实例可以可靠地运行厨师服务器,所以可能必须在同一个实例上专门为厨师服务器设置它们。
我正在编写一个非常简单的厨师菜谱来pipe理Web应用程序的部署,并且我有一个厨师pipe理数据库服务器的节点,并且希望从该数据库服务器中引入IP地址(以及其他一些属性) ,进入在应用服务器上运行的配方… 例如,在检查应用程序服务器上的代码,这样的事情.. hostname = node[:myapp][:dbserver_hostname] attributes = chef_get_attributes_for_hostname(hostname) connect_to_mysql_at_ip = attributes[:ipaddress] 我不确定这是否可以轻松做到这一点? 努力find它的文档。 谢谢!