Cloudkeeper is “housekeeping for clouds” - find leaky resources, manage quota limits, detect drift and clean up.

Overview

Cloudkeeper

Housekeeping for Clouds!

Table of contents

Overview

Cloudkeeper is “housekeeping for clouds” - find leaky resources, manage quota limits, detect drift and clean up.

Cloudkeeper indexes resources, captures dependencies and maps out your infrastructure in a graph so that it’s understandable for a human. The graph contains metrics for each resource. Developers and SREs can search the graph with a query language, and create alerting and clean-up workflows. Metrics can be aggregated and exported to a time series database like Prometheus.

If you ever

  • had a standstill in your CI pipeline because a broken job leaked cloud resources which triggered a quota limit
  • wanted to find all expired certificate
  • had to change the tags of thousands of EC2 instances at once
  • needed to delete all unused EBS volumes that had no I/O in the past month
  • wished for a god view that lets you explore all cloud usage across all clouds
  • reported the cost of a project across different accounts or even across clouds
  • cleaned up orphaned load balancers that had no active backends
  • wanted to automate any of the above

Those are the kinds of situations Cloudkeeper was built for.

Currently it can collect AWS, Google Cloud, VMWare Vsphere, OneLogin and Slack. The later can also be used for notification of resource cleanups. If the cloud you are using is not listed it is easy to write your own collectors. An example can be found here.

Cloudkeeper consists of multiple components described in the component list below

The latest Docker image is: ghcr.io/someengineering/cloudkeeper:2.0.0a6
The latest Documentation can be found on https://docs.some.engineering

Docker based quick start

In this quick start guide, we’re showing you three things, how to:

1. install Cloudkeeper for AWS with docker
2. use the Cloudkeeper CLI to run your first collect process
3. query the results of the collect process 

The docker set-up takes 2-5 minutes. The duration of the first collect process depends on the size of your environment - usually 5-10 minutes.

Examples and data in this guide are based on a small AWS Cloud9 environment.
To start exploring you need AWS credentials and a working Docker environment with access to AWS APIs.
We assume you are familiar with basic Docker operations and how to operate a Linux shell.

Continue reading the Quick Start Guide
--> https://docs.some.engineering/getting_started/quick_start.html

Cloning this repository

This Git repo uses Git Large File Storage (LFS).

If you would like to work on the UI ckui, before cloning the repo make sure to have git-lfs installed!

One time setup:

$ git clone https://github.com/someengineering/cloudkeeper.git
$ cd cloudkeeper/
$ git lfs install  # installs git-lfs hooks

Once set up you can interact with the repo like any other Git project. All large UI assets will be retrived from Github's LFS servers.

If you have no need for the UI assets git-lfs is optional.

Component list

Contact

If you have any questions feel free to join our Discord or open a GitHub issue.

License

Copyright 2021 Some Engineering Inc.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Helm chart

    Helm chart

    Very much draft PR, but submitting to get early feedback:

    • Chart structure - does using deployments make sense? the structure of the values.yaml make sense?
    • Directory structure: Wasn't sure what the best structure? maybe install/helm instead of kubernetes/helm?
    • I created a ./kubernetes/setup-kind.sh as a starting point for an end-to-end test. I plan to add an e2e test in the github actions
    • Helm unit tests. I'm not familiar with python options; i saw a declarative one here. I never used it before, so wanted to get consensus before i add tests.
    • Doc is very much WIP
    • Releasing - how do you want this chart released? i see that you currently don't use github releases. This can also be in follow-up PR.
    opened by yuval-k 12
  • [plugins/aws][feat] Collect tags and enable tagging methods for Route53 Hosted Zones

    [plugins/aws][feat] Collect tags and enable tagging methods for Route53 Hosted Zones

    Description

    Collect tags and enable tagging methods for Route53 Hosted Zones.

    To-Dos

    • [x] Add test coverage for new or updated functionality
    • [x] Lint and test with tox
    • [ ] Document new or updated functionality (someengineering/resoto.com#XXXX)

    Code of Conduct

    By submitting this pull request, I agree to follow the code of conduct.

    opened by anjafr 6
  • AWS user missing mtime

    AWS user missing mtime

    Description

    A user's atime should be the time the account was last used, a users mtime should be the time the password was last updated. The new AWS collector is missing this info.

    Version

    main

    Environment

    No response

    Steps to Reproduce

    No response

    Logs

    No response

    Additional Context

    No response

    opened by lloesche 6
  • Create Helm Chart repository

    Create Helm Chart repository

    Motivation

    Currently, the Helm Chart needs to be pulled from the GitHub repository.

    Desired Behavior

    The Helm Chart should be published in a repository.

    Additional Context

    No response

    Code of Conduct

    • [X] I agree to follow the Code of Conduct
    enhancement 
    opened by TheCatLady 6
  • [plugins/k8s][feat] Add argument to collect all contexts in config file

    [plugins/k8s][feat] Add argument to collect all contexts in config file

    Description

    This avoids the need to specify every context in order to have it imported.

    Added a new argument rather than a magic value like all for --k8s-context to avoid any potential conflicts.

    To-Dos

    • [x] Add test coverage for new or updated functionality (to the extent that there's existing coverage to extend)
    • [x] Lint and test with tox
    • N/A ~Document new or updated functionality (someengineering/resoto.com#XXXX)~

    Code of Conduct

    By submitting this pull request, I agree to follow the code of conduct.

    opened by tdickers 5
  • [resotocore] `Update process interrupted` with large graph updates

    [resotocore] `Update process interrupted` with large graph updates

    Description

    When collecting a large number of accounts *1 the graph merge fails with any version newer than v2.0.0a13.

    Using https://github.com/someengineering/resoto/pull/608 (on a v2.0.0a15 image) to dump the collected graph and model:

    -rw-r--r--   1 marv  staff   306M Feb  7 23:31 resoto-graph-zasag9am.ndjson
    -rw-r--r--   1 marv  staff   103K Feb  7 23:27 resoto-model-bag5nlua.json
    

    Trying the steps @lloesche documented, I was unable to reproduce the behaviour locally (macOS, current main, graphdb in Docker). The graphs imports fine, albeit very slowly (which might just be due to the graphdb being undersized etc).

    Trying to understand whats going on from the provided stack trace:

    1. Import process starts at 19:49:07
    2. Import process dies at 19:49:40 - 33 seconds later.

    This kind of leads me to believe that Queue#get(True, 30) hits its 30 second timeout. Without diving too deep yet, the underlying locking mechanism seems like it might be platform/os dependent and therefore explains why I'm not seeing the same behaviour locally.

    Unfortunately I wont be able to supply the collected graph for debugging.

    Version

    v2.0.0a14+

    Environment

    Linux, Resoto one-for-all container image running on GKE

    Steps to Reproduce

    1. Collect a large graph, let resotoworker send it to resotocore for merge, grep logs of the spawned import process

    Logs

    22-02-07 19:49:01|resotoworker| INFO|85|worker-collect_cleanup  resotocore Event Handler called
    22-02-07 19:49:01|resotocore| INFO|84|MainThread  127.0.0.1 [07/Feb/2022:19:49:01 +0000] "POST /graph/resoto HTTP/1.1" 200 414 "-" "python-requests/2.27.1"
    22-02-07 19:49:04|resotocore| INFO|84|MainThread  127.0.0.1 [07/Feb/2022:19:49:02 +0000] "PATCH /model HTTP/1.1" 200 138466 "-" "python-requests/2.27.1"
    22-02-07 19:49:05|resotocore| INFO|84|MainThread  Received merge_graph request
    ======== Running on http://0.0.0.0:8900 ========
    (Press CTRL+C to quit)
    22-02-07 19:49:07|resotocore| INFO|497|MainThread  Import process started: 497
    22-02-07 19:49:07|resotocore| INFO|497|MainThread  Create ArangoHTTPClient with timeout=900 and verify=True
    22-02-07 19:49:33|resotocore| INFO|84|MainThread  127.0.0.1 [07/Feb/2022:19:49:33 +0000] "GET /metrics HTTP/1.1" 200 30633 "-" "Prometheus/2.32.1"
    22-02-07 19:49:40|resotocore|ERROR|497|MainThread  Update process interrupted. Preemptive Exit. 
    Traceback (most recent call last):
      File "/usr/local/resoto-venv-pypy3/lib/pypy3.8/site-packages/core/model/db_updater.py", line 155, in run
        result = asyncio.run(self.setup_and_merge())
      File "/usr/local/pypy/lib/pypy3.8/asyncio/runners.py", line 44, in run
        return loop.run_until_complete(main)
      File "/usr/local/pypy/lib/pypy3.8/asyncio/base_events.py", line 616, in run_until_complete
        return future.result()
      File "/usr/local/pypy/lib/pypy3.8/asyncio/futures.py", line 178, in result
        raise self._exception
      File "/usr/local/pypy/lib/pypy3.8/asyncio/tasks.py", line 280, in __step
        result = coro.send(None)
      File "/usr/local/resoto-venv-pypy3/lib/pypy3.8/site-packages/core/model/db_updater.py", line 145, in setup_and_merge
        result = await self.merge_graph(db)
      File "/usr/local/resoto-venv-pypy3/lib/pypy3.8/site-packages/core/model/db_updater.py", line 125, in merge_graph
        nxt = self.next_action()
      File "/usr/local/resoto-venv-pypy3/lib/pypy3.8/site-packages/core/model/db_updater.py", line 120, in next_action
        return self.read_queue.get(True, 30)  # type: ignore
      File "/usr/local/pypy/lib/pypy3.8/multiprocessing/queues.py", line 108, in get
        raise Empty
    queue.Empty
    22-02-07 19:49:40|resotocore| INFO|497|MainThread  Shutdown initiated for current process.
    

    Additional Context

    *1 - about 2000-ish GCP projects, only few select resource types resulting in a 306M resoto-graph .ndjson file

    bug 
    opened by MrMarvin 5
  • [resoto][feat] CDK construct

    [resoto][feat] CDK construct

    Description

    Added a CDK construct for a one command resoto deployment to AWS.

    To-Dos

    • [ ] Store container data on a different volume

    • [ ] Document new or updated functionality (someengineering/resoto.com#XXXX)

    Code of Conduct

    By submitting this pull request, I agree to follow the code of conduct.

    opened by meln1k 4
  • Digitalocean collector fails because of an unhandled error

    Digitalocean collector fails because of an unhandled error

    Description

    When running workflows run collect, the collector for DigitalOcean fais with An unhandled error occurred while collecting team XXXXXX (where XXXXX is the our team ID).

    Version

    2.4.1

    Environment

    Docker compose running on macOS 10.15

    Steps to Reproduce

    1. Setup the worker as described here: https://resoto.com/docs/getting-started/configure-cloud-provider-access/digitalocean
    2. Run workflows run collect
    3. Check the log to see the error

    Logs

    resoto-resotoworker-1        | {"timestamp": "2022-09-16T11:53:39", "level": "INFO", "message": "Collecting k8s_clusters in digitalocean_team XXXXXX", "pid": 136, "thread": "digitalocean", "process": "resotoworker"}
    resoto-resotoworker-1        | {"timestamp": "2022-09-16T11:53:39", "level": "INFO", "message": "Collecting snapshots in digitalocean_team XXXXXX", "pid": 136, "thread": "digitalocean", "process": "resotoworker"}
    resoto-resotoworker-1        | {"timestamp": "2022-09-16T11:53:45", "level": "ERROR", "message": "An unhandled error occurred while collecting team XXXXXXX", "pid": 136, "thread": "digitalocean", "process": "resotoworker", "exception": "Traceback (most recent call last):\n  File \"/usr/local/resoto-venv-python3/lib/python3.10/site-packages/resoto_plugin_digitalocean/__init__.py\", line 66, in collect_team\n    dopc.collect()\n  File \"/usr/local/resoto-venv-python3/lib/python3.10/site-packages/resoto_plugin_digitalocean/collector.py\", line 243, in collect\n    collector()\n  File \"<decorator-gen-24>\", line 2, in collect_snapshots\n  File \"/usr/local/resoto-venv-python3/lib/python3.10/site-packages/prometheus_client/context_managers.py\", line 81, in wrapped\n    return func(*args, **kwargs)\n  File \"/usr/local/resoto-venv-python3/lib/python3.10/site-packages/resoto_plugin_digitalocean/collector.py\", line 740, in collect_snapshots\n    self.collect_resource(\n  File \"/usr/local/resoto-venv-python3/lib/python3.10/site-packages/resoto_plugin_digitalocean/collector.py\", line 372, in collect_resource\n    log.debug(f\"Parent resource for {resource_instance.rtdname} automatically set to {pr.rtdname}\")\nAttributeError: 'list' object has no attribute 'rtdname'"}
    resoto-resotoworker-1        | {"timestamp": "2022-09-16T11:53:45", "level": "INFO", "message": "Collector of plugin digitalocean finished in 140.2884s", "pid": 136, "thread": "collector_digitalocean", "process": "resotoworker"}
    

    Additional Context

    No response

    bug 
    opened by Mayeu 4
  • [resotocore][fix] Allow for empty Discord alert message & move to embed description

    [resotocore][fix] Allow for empty Discord alert message & move to embed description

    Description

    As I was editing the Discord how-to guide, I noticed that the current Discord alerts look a little unpolished: image

    We should allow for users to omit the alert message entirely if they only want to specify the title. Also, the message text should be contained within the embed object for a cleaner look (and also so that the message doesn't look like a title).

    To-Dos

    • [ ] Add test coverage for new or updated functionality
    • [ ] Lint and test with tox

    Code of Conduct

    By submitting this pull request, I agree to follow the code of conduct.

    opened by TheCatLady 4
  • [resotocore][feat] Allow configuration of workflow schedules

    [resotocore][feat] Allow configuration of workflow schedules

    Description

    Allow configuration of workflow schedules.

    To-Dos

    • [x] Add test coverage for new or updated functionality
    • [x] Lint and test with tox

    Code of Conduct

    By submitting this pull request, I agree to follow the code of conduct.

    opened by aquamatthias 4
  • [resotocore] Help text is hard to read in Ubuntu Terminal

    [resotocore] Help text is hard to read in Ubuntu Terminal

    Description

    In logs section I've pasted a text version of this screenshot.

    The screenshot shows how the text renders with colors in Ubuntu Terminal.

    The messages that start with hashes such as "# Show all available kinds." are almost impossible to read because the background is dark blue and the text is slightly darker blue.

    image

    Version

    2.0.0a16

    Environment

    Ubuntu 20.04.3 LTS

    Steps to Reproduce

    1. Start an Ubuntu Terminal session.
    2. Start resh using docker run.
    3. Run a help command such as help kind.
    4. Struggle to see the darker blue text on a dark blue background.

    Logs

    > help kind
    kind: Retrieves information about the graph data kinds.                                                  
    
    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │ kind [-p property_path] [name]                                                                        │
    └───────────────────────────────────────────────────────────────────────────────────────────────────────┘
    
    kind gives information about the available graph data kinds.                                             
    
    
                                                     Options                                                 
    
     • -p [Optional] property_path: lookup the kind for the defined property path. This will do a reverse    
       lookup and search all kinds for the specified property path.                                          
    
    
                                                   Parameters                                                
    
     • name [Optional]: show available information about the kind with provided name.                        
    
    
                                                    Examples                                                 
    
    ┌───────────────────────────────────────────────────────────────────────────────────────────────────────┐
    │                                                                                                       │
    │ # Show all available kinds.                                                                           │
    │ > kind                                                                                                │
    │ access_key                                                                                            │
    │ .                                                                                                     │
    │ .                                                                                                     │
    │ zone                                                                                                  │
    │                                                                                                       │
    │ # Show details about a specific kind.                                                                 │
    │ > kind graph_root                                                                                     │
    │ name: graph_root                                                                                      │
    │ bases:                                                                                                │
    │ - graph_root                                                                                          │
    │ properties:                                                                                           │
    │ - description: The name of this node.                                                                 │
    │   kind: string                                                                                        │
    │   name: name                                                                                          │
    │   required: false                                                                                     │
    │ - description: All attached tags of this node.                                                        │
    │   kind: dictionary[string, string]                                                                    │
    │   name: tags                                                                                          │
    │   required: false                                                                                     │
    │                                                                                                       │
    │ # Lookup the type of the given property path in the model.                                            │
    │ > kind -p reported.tags.owner                                                                         │
    │ name: string                                                                                          │
    │ runtime_kind: string                                                                                  │
    └───────────────────────────────────────────────────────────────────────────────────────────────────────┘
    >
    

    Additional Context

    No response

    bug 
    opened by iainelder 4
  • [plugin/aws] Refactor AwsEc2SecurityGroup pre_delete_resource

    [plugin/aws] Refactor AwsEc2SecurityGroup pre_delete_resource

    Motivation

    In the past the resource didn't have group_ip_permissions and group_ip_permissions_egress so the pre_delete method fetched them. Now that they are being collected and part of the node that extra fetch during deletion is no longer necessary.

    Desired Behavior

    Use the data already present in the node, instead of fetching it again.

    Additional Context

    No response

    enhancement 
    opened by lloesche 0
  • AWS Route53 ResourceRecordSets can't be deleted

    AWS Route53 ResourceRecordSets can't be deleted

    Description

    Currently RRSets are only collected but can't be deleted: https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/route53.html#Route53.Client.change_resource_record_sets

    Version

    3.0.0

    Environment

    No response

    Steps to Reproduce

    No response

    Logs

    No response

    Additional Context

    No response

    bug 
    opened by lloesche 0
  • Load balancer `backends` not filled in for DigitalOcean and K8S

    Load balancer `backends` not filled in for DigitalOcean and K8S

    Description

    Load balancer backends not filled in for DigitalOcean and K8S

    Version

    3.0.0

    Environment

    No response

    Steps to Reproduce

    No response

    Logs

    No response

    Additional Context

    No response

    bug 
    opened by lloesche 0
  • Graph operations

    Graph operations

    Motivation

    I'd like to be able to save a version of my infrastructure graph, export it and import it into another Resoto installation.

    Desired Behavior

    > graph snapshot <snapshot_name> [graph_name]
    > graph export <filename> [graph_name]
    > graph import <filename> <graph_name>
    > graph delete <graph_name>
    > graph rename <graph_name> <new_graph_name>
    > model export <filename>
    > model import <filename>
    

    Additional Context

    No response

    enhancement 
    opened by lloesche 0
  • Select random elements of list

    Select random elements of list

    Motivation

    I often find myself wanting to look at the contents of a random element of a search result. Most of the time I do

    search ... | tail -1 | dump
    

    Or the head equivalent, but if I want a third sample I need to copy'paste it from the list output.

    Desired Behavior

    search ... | random | dump   # returns 1 random element
    search ... | random 3 | dump   # returns 3 random elements
    

    Additional Context

    No response

    enhancement 
    opened by lloesche 0
  • Add `grep`

    Add `grep`

    Motivation

    kinds | grep certificate would be great, since kinds is a very long list

    Desired Behavior

    grep filters for string

    Additional Context

    No response

    enhancement 
    opened by lloesche 0
Releases(3.0.3)
  • 3.0.3(Dec 27, 2022)

    Release Notes

    https://resoto.com/news/2022/12/27/3.0.3

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.3
    • somecr.io/someengineering/resotoworker:3.0.3
    • somecr.io/someengineering/resotoshell:3.0.3
    • somecr.io/someengineering/resotometrics:3.0.3
    Source code(tar.gz)
    Source code(zip)
  • 3.0.2(Dec 22, 2022)

    Release Notes

    https://resoto.com/news/2022/12/22/3.0.2

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.2
    • somecr.io/someengineering/resotoworker:3.0.2
    • somecr.io/someengineering/resotoshell:3.0.2
    • somecr.io/someengineering/resotometrics:3.0.2
    Source code(tar.gz)
    Source code(zip)
  • 3.0.1(Dec 13, 2022)

    Release Notes

    https://resoto.com/news/2022/12/13/3.0.1

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.1
    • somecr.io/someengineering/resotoworker:3.0.1
    • somecr.io/someengineering/resotoshell:3.0.1
    • somecr.io/someengineering/resotometrics:3.0.1
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0(Dec 2, 2022)

    Release Notes

    https://resoto.com/news/2022/12/02/3.0.0

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0
    • somecr.io/someengineering/resotoworker:3.0.0
    • somecr.io/someengineering/resotoshell:3.0.0
    • somecr.io/someengineering/resotometrics:3.0.0
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0rc4(Dec 1, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0rc4
    • somecr.io/someengineering/resotoworker:3.0.0rc4
    • somecr.io/someengineering/resotoshell:3.0.0rc4
    • somecr.io/someengineering/resotometrics:3.0.0rc4
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0rc3(Nov 30, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0rc3
    • somecr.io/someengineering/resotoworker:3.0.0rc3
    • somecr.io/someengineering/resotoshell:3.0.0rc3
    • somecr.io/someengineering/resotometrics:3.0.0rc3
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0rc2(Nov 29, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0rc2
    • somecr.io/someengineering/resotoworker:3.0.0rc2
    • somecr.io/someengineering/resotoshell:3.0.0rc2
    • somecr.io/someengineering/resotometrics:3.0.0rc2
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0rc1(Nov 25, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0rc1
    • somecr.io/someengineering/resotoworker:3.0.0rc1
    • somecr.io/someengineering/resotoshell:3.0.0rc1
    • somecr.io/someengineering/resotometrics:3.0.0rc1
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0a4(Nov 24, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0a4
    • somecr.io/someengineering/resotoworker:3.0.0a4
    • somecr.io/someengineering/resotoshell:3.0.0a4
    • somecr.io/someengineering/resotometrics:3.0.0a4
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0a3(Nov 24, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0a3
    • somecr.io/someengineering/resotoworker:3.0.0a3
    • somecr.io/someengineering/resotoshell:3.0.0a3
    • somecr.io/someengineering/resotometrics:3.0.0a3
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0a2(Nov 22, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0a2
    • somecr.io/someengineering/resotoworker:3.0.0a2
    • somecr.io/someengineering/resotoshell:3.0.0a2
    • somecr.io/someengineering/resotometrics:3.0.0a2
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0a1(Nov 21, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0a1
    • somecr.io/someengineering/resotoworker:3.0.0a1
    • somecr.io/someengineering/resotoshell:3.0.0a1
    • somecr.io/someengineering/resotometrics:3.0.0a1
    Source code(tar.gz)
    Source code(zip)
  • 3.0.0a0(Nov 18, 2022)

    Docker Images

    • somecr.io/someengineering/resotocore:3.0.0a0
    • somecr.io/someengineering/resotoworker:3.0.0a0
    • somecr.io/someengineering/resotoshell:3.0.0a0
    • somecr.io/someengineering/resotometrics:3.0.0a0
    Source code(tar.gz)
    Source code(zip)
  • 2.4.7(Nov 17, 2022)

    Release Notes

    https://resoto.com/news/2022/11/17/2.4.7

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.7
    • somecr.io/someengineering/resotoworker:2.4.7
    • somecr.io/someengineering/resotoshell:2.4.7
    • somecr.io/someengineering/resotometrics:2.4.7
    Source code(tar.gz)
    Source code(zip)
  • 2.4.5(Oct 22, 2022)

    Release Notes

    https://resoto.com/news/2022/10/22/2.4.5

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.5
    • somecr.io/someengineering/resotoworker:2.4.5
    • somecr.io/someengineering/resotoshell:2.4.5
    • somecr.io/someengineering/resotometrics:2.4.5
    Source code(tar.gz)
    Source code(zip)
  • 2.4.4(Oct 19, 2022)

    Release Notes

    https://resoto.com/news/2022/10/19/2.4.4

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.4
    • somecr.io/someengineering/resotoworker:2.4.4
    • somecr.io/someengineering/resotoshell:2.4.4
    • somecr.io/someengineering/resotometrics:2.4.4
    Source code(tar.gz)
    Source code(zip)
  • 2.4.3(Oct 11, 2022)

    Release Notes

    https://resoto.com/news/2022/10/11/2.4.3

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.3
    • somecr.io/someengineering/resotoworker:2.4.3
    • somecr.io/someengineering/resotoshell:2.4.3
    • somecr.io/someengineering/resotometrics:2.4.3
    Source code(tar.gz)
    Source code(zip)
  • 2.4.2(Oct 5, 2022)

    Release Notes

    https://resoto.com/news/2022/10/05/2.4.2

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.2
    • somecr.io/someengineering/resotoworker:2.4.2
    • somecr.io/someengineering/resotoshell:2.4.2
    • somecr.io/someengineering/resotometrics:2.4.2
    Source code(tar.gz)
    Source code(zip)
  • 2.4.1(Sep 3, 2022)

    Release Notes

    https://resoto.com/news/2022/09/03/2.4.1

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.1
    • somecr.io/someengineering/resotoworker:2.4.1
    • somecr.io/someengineering/resotoshell:2.4.1
    • somecr.io/someengineering/resotometrics:2.4.1
    Source code(tar.gz)
    Source code(zip)
  • 2.4.0(Aug 16, 2022)

    Release Notes

    https://resoto.com/news/2022/08/16/2.4.0

    Docker Images

    • somecr.io/someengineering/resotocore:2.4.0
    • somecr.io/someengineering/resotoworker:2.4.0
    • somecr.io/someengineering/resotoshell:2.4.0
    • somecr.io/someengineering/resotometrics:2.4.0
    Source code(tar.gz)
    Source code(zip)
  • 2.3.2(Jun 24, 2022)

    Release Notes

    https://resoto.com/news/2022/06/24/2.3.2

    Docker Images

    • somecr.io/someengineering/resotocore:2.3.2
    • somecr.io/someengineering/resotoworker:2.3.2
    • somecr.io/someengineering/resotoshell:2.3.2
    • somecr.io/someengineering/resotometrics:2.3.2
    Source code(tar.gz)
    Source code(zip)
  • 2.3.1(Jun 22, 2022)

    Release Notes

    https://resoto.com/news/2022/06/22/2.3.1

    Docker Images

    • somecr.io/someengineering/resotocore:2.3.1
    • somecr.io/someengineering/resotoworker:2.3.1
    • somecr.io/someengineering/resotoshell:2.3.1
    • somecr.io/someengineering/resotometrics:2.3.1
    Source code(tar.gz)
    Source code(zip)
  • 2.2.0(May 13, 2022)

    Release Notes

    https://resoto.com/news/2022/05/13/2.2.0

    Docker Images

    • somecr.io/someengineering/resotocore:2.2.0
    • somecr.io/someengineering/resotoworker:2.2.0
    • somecr.io/someengineering/resotoshell:2.2.0
    • somecr.io/someengineering/resotometrics:2.2.0
    Source code(tar.gz)
    Source code(zip)
  • 2.1.0(Apr 28, 2022)

    Release Notes

    https://resoto.com/news/2022/04/28/2.1.0

    Docker Images

    • somecr.io/someengineering/resotocore:2.1.0
    • somecr.io/someengineering/resotoworker:2.1.0
    • somecr.io/someengineering/resotoshell:2.1.0
    • somecr.io/someengineering/resotometrics:2.1.0
    Source code(tar.gz)
    Source code(zip)
  • 2.0.2(Apr 22, 2022)

    Release Notes

    https://resoto.com/news/2022/04/22/2.0.2

    Docker Images

    • somecr.io/someengineering/resotocore:2.0.2
    • somecr.io/someengineering/resotoworker:2.0.2
    • somecr.io/someengineering/resotoshell:2.0.2
    • somecr.io/someengineering/resotometrics:2.0.2
    Source code(tar.gz)
    Source code(zip)
  • 2.0.1(Apr 14, 2022)

    Release Notes

    https://resoto.com/news/2022/04/14/2.0.1

    Docker Images

    • somecr.io/someengineering/resotocore:2.0.1
    • somecr.io/someengineering/resotoworker:2.0.1
    • somecr.io/someengineering/resotoshell:2.0.1
    • somecr.io/someengineering/resotometrics:2.0.1
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(Apr 12, 2022)

    Release Notes

    https://resoto.com/news/2022/04/12/2.0.0

    Docker Images

    • somecr.io/someengineering/resotocore:2.0.0
    • somecr.io/someengineering/resotoworker:2.0.0
    • somecr.io/someengineering/resotoshell:2.0.0
    • somecr.io/someengineering/resotometrics:2.0.0
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0rc2(Apr 9, 2022)

    Docker Images

    All-in-One

    • somecr.io/someengineering/resoto:2.0.0rc2

    Components

    • somecr.io/someengineering/resotocore:2.0.0rc2
    • somecr.io/someengineering/resotoworker:2.0.0rc2
    • somecr.io/someengineering/resotoshell:2.0.0rc2
    • somecr.io/someengineering/resotometrics:2.0.0rc2
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0rc1(Apr 6, 2022)

    Docker Images

    All-in-One

    • somecr.io/someengineering/resoto:2.0.0rc1

    Components

    • somecr.io/someengineering/resotocore:2.0.0rc1
    • somecr.io/someengineering/resotoworker:2.0.0rc1
    • somecr.io/someengineering/resotoshell:2.0.0rc1
    • somecr.io/someengineering/resotometrics:2.0.0rc1
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0rc0(Apr 5, 2022)

    Docker Images

    All-in-One

    • somecr.io/someengineering/resoto:2.0.0rc0

    Components

    • somecr.io/someengineering/resotocore:2.0.0rc0
    • somecr.io/someengineering/resotoworker:2.0.0rc0
    • somecr.io/someengineering/resotoshell:2.0.0rc0
    • somecr.io/someengineering/resotometrics:2.0.0rc0
    Source code(tar.gz)
    Source code(zip)
Owner
Some Engineering
Some Engineering
Discord spam bots with multiple account support and more

Discord spam bots with multiple account support and more. PLEASE READ EVERYTHING BEFORE WRITING AN ISSUE!! Server Messages Text Image Dm Messages Text

Mr. Nobody 6 Sep 14, 2022
ByDiego Token Grabber is a Discord Stealer

ByDiego Token Grabber is a Discord Stealer. This way you can get too much information from x person if you pass it on and open it

zByDiegoM.T 4 Mar 11, 2022
This is a Python bot, which automates logging in, purchasing and planting the seeds. Open source bot and completely free.

🌻 Sunflower Land Bot 🌻 ⚠️ Warning I am not responsible for any penalties incurred by those who use the bot, use it at your own risk. This BOT is com

Newerton 18 Aug 31, 2022
An Telegram Bot By @AsmSafone To Stream Videos in Telegram Voice Chat. This is Also The Source Code of The Bot Which is Being Used In @SafoTheBot Group! ❤️

Telegram Video Player Bot (Beta) An Telegram Bot By @AsmSafone To Stream Videos in Telegram Voice Chat. Special Features Supports Live Streaming From

SAF ONE 206 Jan 03, 2023
Python library wrapping and enhancing the Invenio RDM REST API.

Iridium The metal Iridium is used to refine and enhance metal alloys. Similarly, this package provides an enhanced coating around the Invenio RDM APIs

Materials Data Science and Informatics 2 Mar 29, 2022
Telegram bot that search for the classrooms status of the chosen day and then return all the free classrooms using your preferred time slot

Aule Libere Polimi Since the PoliMi site no longer allows people to search for free classrooms this bot was necessary! It simply search for the classr

Daniele Ferrazzo 16 Nov 09, 2022
Python wrapper for the GitLab API

Python GitLab python-gitlab is a Python package providing access to the GitLab server API. It supports the v4 API of GitLab, and provides a CLI tool (

1.9k Dec 31, 2022
Acid's Utilities is a bot for my Discord server that alerts when I go live, welcomes new users, has some awesome games and so much more!

Acid's Utilities Acid's Utilities is a bot for my Discord server that alerts when I go live, welcomes new users, has some awesome games and so much mo

AcidFilms (Fin Stuart) 3 Nov 19, 2021
Updated version of A discord token/password grabber thats grabs all of their tokens, passwords, credit card + alot more

Updated version of A discord token/password grabber thats grabs all of their tokens, passwords, credit card + alot more

Rdimo 556 Aug 05, 2022
TgMusicBot is a telegram userbot for playing songs in telegram voice calls based on Pyrogram and PyTgCalls.

TgMusicBot [Stable] TgMusicBot is a telegram userbot for playing songs in telegram voice calls based on Pyrogram and PyTgCalls. Commands !start / !hel

Kürşad 21 Dec 25, 2022
A Telelgram Bot to Extract Text from an Image

Text-Scanner-OCR A Telelgram Bot to Extract Text from an Image Configs Vars API_KEY: Your API_KEY from OCR Space GROUP: Your Group Username without '@

ALBY 8 Feb 20, 2022
A fun hangman style game to guess random movie names with a short summary about the movie.

hang-movie-man Hangman but for movies 😉 This is a fun hangman style game to guess random movie names from the local database and show some summary ab

Ankit Josh 10 Sep 07, 2022
Telegram bot to clip youtube videos

youtube-clipper-bot Telegram bot to clip youtube videos How to deploy? Create a file called config.env BOT_TOKEN: Provide your bot token generated by

Shivam Jha 11 Dec 10, 2022
The official Python library for Shodan

shodan: The official Python library and CLI for Shodan Shodan is a search engine for Internet-connected devices. Google lets you search for websites,

John Matherly 2.1k Dec 31, 2022
A Sublime Text plugin that displays inline images for single-line comments formatted like `// ![](example.png)`.

Inline Images Sometimes ASCII art is not enough. Sometimes an image says more than a thousand words. This Sublime Text plugin can display images inlin

Andreas Haferburg 8 Jul 01, 2022
A Pancakeswap and Uniswap trading client (and bot) with limit orders, marker orders, stop-loss, custom gas strategies, a GUI and much more.

Pancakeswap and Uniswap trading client Adam A A Pancakeswap and Uniswap trading client (and bot) with market orders, limit orders, stop-loss, custom g

570 Mar 09, 2022
pylunasvg - Python bindings for lunasvg

pylunasvg - Python bindings for lunasvg Pylunasvg is a simple wrapper around lunasvg that uses pybind11 to create python bindings. All public API of t

Eren 6 Jan 05, 2023
Manage gmail account using python, forget about imap and just code what you supposed to do.

GGmail Manage gmail account using python, forget about imap and just code what you supposed to do. Help See documentation for more details. Install In

Dylan Do Amaral 6 Sep 23, 2022
An attendance bot that joins google meet automatically according to schedule and marks present in the google meet.

Google-meet-self-attendance-bot An attendance bot which joins google meet automatically according to schedule and marks present in the google meet. I

Sarvesh Wadi 12 Sep 20, 2022
The official wrapper for spyse.com API, written in Python, aimed to help developers build their integrations with Spyse.

Python wrapper for Spyse API The official wrapper for spyse.com API, written in Python, aimed to help developers build their integrations with Spyse.

Spyse 15 Nov 22, 2022