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
Pure Python implementation of the Windows API method IDvdInfo2::GetDiscID.

pydvdid-m Pure Python implementation of the Windows API method IDvdInfo2::GetDiscID. This is a modification of sjwood's pydvdid. The Windows API metho

4 Nov 22, 2022
domhttpx is a google search engine dorker with HTTP toolkit built with python, can make it easier for you to find many URLs/IPs at once with fast time.

domhttpx is a google search engine dorker with HTTP toolkit built with python, can make it easier for you to find many URLs/IPs at once with fast time

Naufal Ardhani 59 Dec 04, 2022
A multi-tenant multi-client scalable product categorising demo stack

Better Categories 4All: A multi-tenant multi-client product categorising stack The steps to reproduce training and inference are in the end of this fi

7 Feb 15, 2022
An elegant mirai-api-http v2 Python SDK.

Ariadne 一个适用于 mirai-api-http v2 的 Python SDK。 本项目适用于 mirai-api-http 2.0 以上版本。 目前仍处于开发阶段,内部接口可能会有较大的变化。 安装 poetry add graia-ariadne 或 pip install graia

Graia Project 259 Jan 02, 2023
This is a simple grabber written in Python which helps you to grab products from Willhaben.at

Willhaben Grabber This is a simple grabber written in Python which helps you to grab products from Willhaben.at General info The tool generates a sear

Ramo 0 Feb 16, 2022
A Powerful, Smart And Simple Userbot In Telethon.

Owner: Masterolic 🇮🇳 BLACK LIGHTNING A Powerful, Smart And Simple Userbot In Telethon. Credits This is A Remix Bot Of Many UserBot. DARKCOBRA Friday

Masterolic 1 Nov 28, 2021
A Python Module That Uses ANN To Predict A Stocks Price And Also Provides Accurate Technical Analysis With Many High Potential Implementations!

Stox ⚡ A Python Module For The Stock Market ⚡ A Module to predict the "close price" for the next day and give "technical analysis". It uses a Neural N

Dopevog 31 Dec 16, 2022
An unofficial API for lyricsfreak.com using django and django rest framework.

An unofficial API for lyricsfreak.com using django and django rest framework.

Hesam Norin 1 Feb 09, 2022
EduuRobot Telegram bot source code.

EduuRobot A multipurpose Telegram Bot made with Pyrogram and asynchronous programming. Requirements Python 3.6+ An Unix-like operating system (Running

Amano Team 119 Dec 23, 2022
Telegram File Renamer Bot

RENAMER_BOT Telegram File Renamer Bot Configs TG_BOT_TOKEN - Get bot token from @BotFather API_ID - From my.telegram.org API_HASH - From my.telegram.o

Lntechnical 37 Dec 27, 2022
Py hec token mgr - Create HEC tokens in Cribl Stream through the API

Add HEC tokens via API calls This script is intended as an example of how to aut

Jon Rust 3 Mar 04, 2022
A drop-in vanilla discord.py cog to add slash command support with little to no code modifications

discord.py /slash cog A drop-in vanilla discord.py cog that acts as a translation layer to add slash command support with little to no code modificati

marshall 3 Jun 01, 2022
With this program you can work English & Turkish

1 - How Can I Work This? You must have Python compilers in order to run this program. First of all, download the compiler in the link. Compiler 2 - Do

Mustafa Bahadır Doğrusöz 3 Aug 07, 2021
The official source code for Ghost Discord selfbot.

👻 Ghost Selfbot The official code for Ghost which was recently discontinued and released to the public. Feel free to use any of the code found in thi

Ghost 121 Nov 09, 2022
Erhalten Sie wichtige Warnmeldungen des Bevölkerungsschutzes für Gefahrenlagen wie zum Beispiel Gefahrstoffausbreitung oder Unwetter per Programmierschnittstelle.

nina-api Erhalten Sie wichtige Warnmeldungen des Bevölkerungsschutzes für Gefahrenlagen wie zum Beispiel Gefahrstoffausbreitung oder Unwetter per Prog

Bundesstelle für Open Data 68 Dec 19, 2022
High-Resolution Differential Z-Belt Mod for V0 (with optional Kirigami support)

V0-DBM This is a high-resolution differential pulley system belt mod for the Z-axis on Voron 0 with optional Kirigami Bed support. NOTE: Alpha version

Simon Küppers 11 Jan 07, 2023
A script that writes automatic instagram comments under a post

Send automatic messages under a post on instagram Instagram will rate limit you after some time. From there on you can only post 1 comment every 40 se

Maximilian Freitag 3 Apr 28, 2022
An api, written in Python, for Investopedia's paper trading stock simulator.

investopedia-trading-api An API, written in Python, for Investopedia's paper trading stock simulator. Pull requests welcome. This library is now Pytho

Kirk Thaker 178 Jan 06, 2023
Ditch Xiaomi's cloud and use a Telegram bot instead

Yi-Home_Telegram_Bot_Interface Ditch Xiaomi's cloud and use a Telegram bot instead Features Motion detection Works by monitoring a tmp file that is cr

Erli 10 Aug 18, 2022
Telegram bot with various Sticker Tools

Sticker Tools Bot @Sticker_Tools_Bot A star ⭐ from you means a lot to us! Telegram bot with various Sticker Tools Usage Deploy to Heroku Tap on above

Stark Bots 20 Dec 08, 2022