Skip to main content

Installing Resoto with pip

pip is the package installer for Python and allows for easy installation of Python packages in Linux environments.

Prerequisites

note

Resoto is doing a lot of CPU-intense graph operations. For a production setup we recommend running resotocore using the PyPy Python interpreter. On average, PyPy is 4.5 times faster than CPython (the reference Python implementation). When using Resoto in Docker we are already shipping it with PyPy by default.

Installing Resoto

Resoto consists of multiple components that are published as individual Python packages:

  1. 📦 resotocore maintains the infrastructure graph.
  2. 📦 resotoworker collects infrastructure data from the cloud provider APIs.
  3. 📦 resotometrics exports metrics in Prometheus format.
  4. 📦 resotoshell is the command-line interface (CLI) used to interact with Resoto.
  5. 📦 resoto-plugins a collection of worker plugins.
Installing Resoto using pip
$ mkdir -p ~/resoto
$ cd ~/resoto
$ python3 -m venv resoto-venv # Create a virtual Python environment.
$ source resoto-venv/bin/activate # Activate the virtual Python environment.
$ python -m ensurepip --upgrade # Ensure pip is available.
$ pip install -U resotocore resotoworker resotometrics resotoshell resoto-plugins
# Generate two random passphrases. One to secure the graph database and one to secure resotocore with.
$ echo $(LC_ALL=C tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c 20) > .graphdb-password
$ echo $(LC_ALL=C tr -dc _A-Z-a-z-0-9 < /dev/urandom | head -c 20) > .pre-shared-key
$ chmod 600 .graphdb-password .pre-shared-key

Installing ArangoDB

Follow the ArangoDB installation instructions for your Linux distribution. Also read the Linux Operating System Configuration guide for optimal database performance.

A copy'paste ready snippet that worked at the time of writing this documentation:

$ mkdir -p ~/resoto/arangodb ~/resoto/data
$ cd ~/resoto
$ curl -L -o arangodb3.tar.gz https://download.arangodb.com/arangodb39/Community/Linux/arangodb3-linux-3.9.1.tar.gz
$ tar xzf arangodb3.tar.gz --strip-components=1 -C arangodb
$ rm -f arangodb3.tar.gz
$ arangodb/bin/arangod --database.directory ~/resoto/data

This will start ArangoDB on the current shell which is useful for testing. Once Resoto Core starts it will automatically secure the ArangoDB installation using the password provided in the .graphdb-password file (unless explicitly turned off using the --graphdb-bootstrap-do-not-secure flag).

Read the section Securing ArangoDB for details on how to generate certificates and encrypt the connection between Resoto Core and the graph database.

Running Resoto

Create multiple shells/tabs and run each component in a separate shell:

$ graphdb_password=$(< ~/resoto/.graphdb-password)
$ pre_shared_key=$(< ~/resoto/.pre-shared-key)
$ source ~/resoto/resoto-venv/bin/activate
$ resotocore --graphdb-password "$graphdb_password" --graphdb-server http://localhost:8529 --psk "$pre_shared_key"

Resoto Core only listens on localhost:8900 by default. Resoto Core can be configured to listen on all interfaces if desired.

Launching the Command-Line Interface

The resh command starts an interactive shell session with Resoto. To access the Resoto Shell interface, simply execute:

$ pre_shared_key=$(< ~/resoto/.pre-shared-key)
$ source ~/resoto/resoto-venv/bin/activate
$ resh --resotocore-uri https://localhost:8900 --psk "$pre_shared_key"

Configuring Resoto

Please refer to Configuring Resoto for details.

Collecting Cloud Resources

Once one or more cloud providers have been configured the collect_and_cleanup workflow can be run by executing:

> workflow run collect_and_cleanup

No worries, no cleanup will be performed as cleanup is disabled by default. It is just the name of the workflow. See the Cleaning Resources tutorial for details on how to enable cleanup.

Performing Searches

Once Resoto has completed its first collect run, you can try performing some searches.

Updating Resoto

When a new version of Resoto is available, simply run pip install --upgrade:

$ pip install --upgrade resotocore resotoworker resotometrics resotoshell resoto-plugins