gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 09:20:30 27 4
gpt4 key购买 nike

我们目前正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com