使用 Chef 打开 Mongo Shell
Opening Mongo Shell using Chef
我正在使用 chef 脚本来安装 mongo、配置复制和 运行 一些数据库初始化脚本 (load("initializeScript.js"))
Mongo 现在安装没有任何问题,但是为了配置副本成员,我需要打开 mongo shell 和 运行 命令,例如:
rs.initiate() and rs.add("SERVER DETAILS")
我正在尝试这样做
mongo_shell_command = 'mongo -ssl --sslPEMKeyFile ' +node['mongo']['ssl']['dir'] +node['hostname'] + '.pem --sslCAFile ' + node['mongo']['ssl']['dir'] + node['mongo']['cert'] + ' --sslAllowInvalidHostnames'
execute 'mongo_shell' do
command mongo_shell_command
end
execute 'mongo_replicaSet' do
command "mongo --eval rs.execute()"
only_if { ::File.exist?(node['mongo']['config']) }
end
execute 'initialize_db' do
command "mongo --eval \"load(\"initializeScript.js\")\""
cwd node['mongo']['script']['dir']
end
但这失败了。
有没有其他方法可以使用 chef 打开 mongo shell 并执行这些命令
你那里的东西可以清理一下,但总的来说你的想法是正确的。您可以将命令文件传递给 运行,这样您就可以直接执行 mongo initializeScript.js
而不是使用 load()
。为了简单起见,您可能希望将所有三个初始化命令组合成一个东西,但这取决于您。
经过一番研发,我想出了办法
- 不需要专门打开mongoshell。
- 最后使用--eval,直接运行命令。
- 需要提供之间的延迟
资源,因为初始化需要几秒钟 mongo.
我正在使用 chef 脚本来安装 mongo、配置复制和 运行 一些数据库初始化脚本 (load("initializeScript.js"))
Mongo 现在安装没有任何问题,但是为了配置副本成员,我需要打开 mongo shell 和 运行 命令,例如:
rs.initiate() and rs.add("SERVER DETAILS")
我正在尝试这样做
mongo_shell_command = 'mongo -ssl --sslPEMKeyFile ' +node['mongo']['ssl']['dir'] +node['hostname'] + '.pem --sslCAFile ' + node['mongo']['ssl']['dir'] + node['mongo']['cert'] + ' --sslAllowInvalidHostnames'
execute 'mongo_shell' do
command mongo_shell_command
end
execute 'mongo_replicaSet' do
command "mongo --eval rs.execute()"
only_if { ::File.exist?(node['mongo']['config']) }
end
execute 'initialize_db' do
command "mongo --eval \"load(\"initializeScript.js\")\""
cwd node['mongo']['script']['dir']
end
但这失败了。
有没有其他方法可以使用 chef 打开 mongo shell 并执行这些命令
你那里的东西可以清理一下,但总的来说你的想法是正确的。您可以将命令文件传递给 运行,这样您就可以直接执行 mongo initializeScript.js
而不是使用 load()
。为了简单起见,您可能希望将所有三个初始化命令组合成一个东西,但这取决于您。
经过一番研发,我想出了办法
- 不需要专门打开mongoshell。
- 最后使用--eval,直接运行命令。
- 需要提供之间的延迟 资源,因为初始化需要几秒钟 mongo.