使用 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()。为了简单起见,您可能希望将所有三个初始化命令组合成一个东西,但这取决于您。

经过一番研发,我想出了办法

  1. 不需要专门打开mongoshell。
  2. 最后使用--eval,直接运行命令。
  3. 需要提供之间的延迟 资源,因为初始化需要几秒钟 mongo.