mongodb - 在 mongodb 启动后让 Chef 执行一个 mongodb 脚本

标签 mongodb provisioning chef-infra

我们目前正在使用 chef 来配置我们的服务器,我们希望我们的 Recipe/Recipe 在安装和运行后自动将一些数据添加到 mongo 数据库中。

这是我们开始遇到问题的地方。我们使用 execute 资源来运行 mongo 脚本,如下所示:

execute "install-mongodb-config" do
  command "mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
  action :run
end

无论我们尝试什么,这部分 Recipe 总是失败!我不会详细介绍我们在这里尝试的所有内容(除非我需要),但我只想说我已经用尽了订阅和通知的所有可能性(我认为)。

问题源于我们正在使用 mongodb::10gen_repo 安装 mongodb。当 apt-get 安装包时,配方退出,然后 chef 继续执行更多资源。

我们尝试在 mongodb::10gen_repo 之后直接执行上述资源,但似乎 mongodb 不可用,mongo shell 无法连接和运行脚本。我们看到的错误有点像这样:

MongoDB shell version: 2.0.2
Thu Sep  6 18:40:45 ReferenceError: setTimeout is not defined mongotest.js:2
failed to load: mongoAddConfig.js

我们尝试过的任何方法都无法以不错的 Chef 方式解决这个问题。我们采取的措施是用以下内容替换执行资源:

execute "install-mongodb-config" do
  command "sleep 60; mongo #{node[:mongodb][:mongo_db_host]}/#{node[:mongodb][:mongo_db]} \"#{node[:mongodb][:mongo_add_config_script]}\""
  action :run
end

这只会让命令在运行 mongo 脚本之前休眠 60 秒。我知道这不是执行此操作的正确方法,但它目前有效。

任何人都可以建议正确的方法吗?我有一种感觉,我需要与创建 mongodb Chef 脚本的人交谈并请求一个功能!

最佳答案

首先。删除这个“ sleep 60”。这可以由 Chef 完成:所有资源都有common attributes “重试”和“retry_delay”是其中的一部分。所以最简单的方法是:

execute "install-mongodb-config" do
  command "mongo some_command"
  action :run
  retries 6
  retry_delay 10
end

如果你有超过 2-3 个地方,你必须在 mongo 数据库上运行一些命令,考虑创建 LWRP,类似于在这个 mongodb cookbook 中创建的一个. (特别检查 libraries/mongodb.rb 文件)。您可以在那里隐藏等待服务器响应的逻辑。

关于mongodb - 在 mongodb 启动后让 Chef 执行一个 mongodb 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12306684/

相关文章:

ios - 不使用 Xcode 配置设备

chef-infra - 跑 Knife 在地址部分给了我双@

java - wasAcknowledged 标志在 mongodb 3.3.0 以上的实现

node.js - 无法使用 MEAN 堆栈连接到 Mongodb.atlas 集群

iphone - 删除了Team Provisioning Profile :* in the Provisioning Portal,怎么办?

iPhone + 配置文件 + app-info.plist + entitlements.plist = iPhoneApp ?如何 ? entitlemets.plist 到底有什么作用?

linux - Chef 服务器安装问题

yaml - 在 Test Kitchen 中使用类似的 "suites"进行代码重用?

java - MongoDB 主机名/URI 配置

node.js - Node js -如何从数组中删除特定的_id数据