10gen / mongo-orchestration

Apache License 2.0
7 stars 11 forks source link

Mongo Orchestration

See the wiki <https://github.com/10gen/mongo-orchestration/wiki>__ for documentation.

Mongo Orchestration is an HTTP server that provides a REST API for creating and managing MongoDB configurations on a single host.

THIS PROJECT IS FOR TESTING OF MONGODB DRIVERS.

Features

Requires

Installation

The easiest way to install Mongo Orchestration is with pip <https://pypi.python.org/pypi/pip>__:

::

pip install mongo-orchestration

You can also install the development version of Mongo Orchestration manually:

::

git clone https://github.com/10gen/mongo-orchestration.git
cd mongo-orchestration
pip install .

Cloning the repository <https://github.com/10gen/mongo-orchestration>__ this way will also give you access to the tests for Mongo Orchestration as well as the mo script. Note that you may have to run the above commands with sudo, depending on where you're installing Mongo Orchestration and what privileges you have. Installation will place a mongo-orchestration script on your path.

Usage

::

mongo-orchestration [-h] [-f CONFIG] [-e ENV] [--no-fork] [-b BIND IP="localhost"] [-p PORT]
                    [-s {auto,cheroot,wsgiref}] [--socket-timeout-ms MILLIS]
                    [--pidfile PIDFILE] [--enable-majority-read-concern] {start,stop,restart}

Arguments:

In addition, Mongo Orchestration can be influenced by the MONGO_ORCHESTRATION_HOME environment variable, which informs the server where to find the "configurations" directory for presets as well as where to put the log and pid files.

Examples


``mongo-orchestration start``

Starts Mongo Orchestration as service on port 8889.

``mongo-orchestration stop``

Stop the server.

``mongo-orchestration -f mongo-orchestration.config -e 30-release -p 8888 --no-fork start``

Starts Mongo Orchestration on port 8888 using ``30-release`` defined in
``mongo-orchestration.config``. Stops with *Ctrl+C*.

If you have installed mongo-orchestration but you're still getting
``command not found: mongo-orchestration`` this means that the script was
installed to a directory that is not on your ``PATH``. As an alternative use:

``python -m mongo_orchestration.server start``

Configuration File

Mongo Orchestration may be given a JSON configuration file with the --config option specifying where to find MongoDB binaries. See mongo-orchestration.config <https://github.com/10gen/mongo-orchestration/blob/master/mongo-orchestration.config>__ for an example. When no configuration file is provided, Mongo Orchestration uses whatever binaries are on the user's PATH.

Predefined Configurations

Mongo Orchestration has a set of predefined configurations <https://github.com/10gen/mongo-orchestration/tree/master/mongo_orchestration/configurations> that can be used to start, restart, or stop MongoDB processes. You can use a tool like curl to send these files directly to the Mongo Orchestration server, or use the mo script in the scripts directory (in the repository <https://github.com/10gen/mongo-orchestration> only). Some examples:

Note that in order to run the mo script, you need to be in the same directory as "configurations".

Helpful hint: You can prettify JSON responses from the server by piping the response into python -m json.tool, e.g.:

::

$ curl http://localhost:8889/v1/servers/myServer | python -m json.tool

{
    "id": "myServer",
    "mongodb_uri": "mongodb://localhost:1025",
    "orchestration": "servers",
    "procInfo": {
        "alive": true,
        "name": "mongod",
        "optfile": "/var/folders/v9/spc2j6cx3db71l/T/mongo-KHUACD",
        "params": {
            "dbpath": "/var/folders/v9/spc2j6cx3db71l/T/mongo-vAgYaQ",
            "ipv6": true,
            "journal": true,
            "logappend": true,
            "oplogSize": 100,
            "port": 1025
        },
        "pid": 51320
    },
    // etc.
}

Mongo Launch

The mongo-launch CLI tool allows you to spin up servers locally with minimal configuration.

..

mongo-launch --help
Usage: launch.py [single|replica|shard] [ssl] [auth]

..

mongo-orchestration start
mongo-launch replica ssl auth

Tests

In order to run the tests, you should first clone the repository <https://github.com/10gen/mongo-orchestration>__.

Run all tests


``python -m unittest``

Run a test module

python -m unittest tests.test_servers

Run a single test case


``python -m unittest tests.test_servers.ServerSSLTestCase``

Run a single test method

python -m unittest tests.test_servers.ServerSSLTestCase.test_ssl_auth

Run a single test example for debugging with verbose and immediate stdout output


``python -m unittest -v tests.test_servers.ServerSSLTestCase``

Changelog
---------

Changes in Version 0.8.0 (2023-05-16)

Changes in Version 0.7.0 (2021-04-06)


- Remove support for managing MongoDB 2.4 servers.
- Add support for Python 3.8 and 3.9.
- Add support for MongoDB 4.2 and 4.4.
- Upgrade from pymongo 3.5.1 to 3.X latest. (#284).
- Ensure createUser succeeds on all replica set members. (#282)
- Create admin user with both SCRAM-SHA-256 and SCRAM-SHA-1. (#281)
- Wait for mongo-orchestration server to fully terminate in "stop". (#276)
- Allow starting clusters with enableTestCommands=0. (#269)
- Decrease transactionLifetimeLimitSeconds on 4.2+ by default. (#267)
- Increase maxTransactionLockRequestTimeoutMillis by default. (#270)
- Reduce periodicNoopIntervalSecs for faster driver change stream testing. (#283)
- Enable ztsd compression by default on 4.2+ (#263)

Changes in Version 0.6.12 (2018-12-14)