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
A Python bot that uses the Reddit API to send users inspiring messages.

AnonBot By Edric Antoine A Python bot that uses the Reddit API to send users inspiring messages. When a message includes 'What would Anon do?', the bo

1 Jan 05, 2022
pyhakuna is a client to access the API of the time keeping service hakuna.ch.

pyhakuna pyhakuna is a client to access the API of the time keeping service hakuna.ch. The Hakuna API is – unfortunately – personal and currently does

Christian Mäder 1 Feb 15, 2022
Valorant store offer discord-bot

Valorant store checker - Discord Bot Discord bot that shows your daily store offer without open the VALORANT by using the Ingame API. written using Py

STACIA 226 Jan 02, 2023
Telegram bot to host python bots

Host-Bot Setup the api Upload the flask api on your host #its not important to do #i used it just for simple captcha system + save ids on your host!

Plugin 15 Feb 11, 2022
Implement backup and recovery with AWS Backup across your AWS Organizations using a CI/CD pipeline (AWS CodePipeline).

Backup and Recovery with AWS Backup This repository provides you with a management and deployment solution for implementing Backup and Recovery with A

AWS Samples 8 Nov 22, 2022
:lock: Python 2.7/3.X client for HashiCorp Vault

hvac HashiCorp Vault API client for Python 3.x Tested against the latest release, HEAD ref, and 3 previous minor versions (counting back from the late

hvac 1k Dec 29, 2022
Discord bot to monitor collection of mods on the Steam Workshop and notify on update to selected discord server via Nextcordbot API.

Steam-Workshop-Monitor Discord bot to monitor collection of mods on the Steam Workshop and notify on update to selected Discord channel via Nextcordbo

7 Nov 03, 2022
KaydyPurge - Python Purge Script for Discord made by Kaydy Cain#0001

How to Install Open terminal Execute "git clone https://github.com/apolo1337/Kay

apolo 5 Jan 27, 2022
The world's first public V2ray manager Telegram bot

📌 DarkV2ray-Manager-Bot 0.1 UPDATE 11/11/2021 Telegram bot v2ray Test user expired date data limit paylode && sni usage user on/off heroku bot hostin

@Dk_king_offcial 1 Nov 11, 2021
Role Based Access Control for Slack-Bolt Applications

Role Based Access Control for Slack-Bolt Apps Role Based Access Control (RBAC) is a term applied to limiting the authorization for a specific operatio

Jeremy Schulman 7 Jan 06, 2022
💻 A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline!

LocalStack - A fully functional local AWS cloud stack LocalStack provides an easy-to-use test/mocking framework for developing Cloud applications. Cur

LocalStack 45.3k Jan 02, 2023
Практическая работа 6 - Документирование кода

Практическая работа №6 ПСП – правильная скобочная последовательность – последовательность из открывающих «(« и закрывающих «)» круглых скобок. Програм

0 Apr 14, 2022
Crypto-trading-simulator - Cryptocurrency trading simulator using Python, Streamlit

Crypto Trading Simulator Run streamlit run main.py Dependency Python 3 streamli

Brad 12 Jul 02, 2022
Zalo AI challenge 2021 5K-Compliance

Zalo AI challenge 2021 5K-Compliance Prepare data: Dữ liệu của ban tổ chức cung

Nguyễn nhật hoàng 32 Nov 21, 2022
Telegram chats reader with python

Telegram chat reader Программа полностью сливает чаты телеграм в базу данных PostgreSQL. Для использования нужен развернутый сервер постгрес и телегра

Anton 4 Dec 24, 2021
Wechat-file-cleaner - Clean files in PC WeChat FileStorage directory

Wechat-file-cleaner - Clean files in PC WeChat FileStorage directory

Xingjian Zhang 1 Feb 06, 2022
A Django-style ORM idea for manipulating Google Datastore entities

No SeiQueLa ORM EM DESENVOLVIMENTO Uma ideia de ORM no estilo do Django para manipular entidades do Google Datastore. Montando seu modelo: from noseiq

Geraldo Castro 16 Nov 01, 2022
To dynamically change the split direction in I3/Sway so as to split new windows automatically based on the width and height of the focused window

To dynamically change the split direction in I3/Sway so as to split new windows automatically based on the width and height of the focused window Insp

Ritin George 6 Mar 11, 2022
This is Instagram reposter that repost TikTok videos.

from-tiktok-to-instagram-reposter This script reposts videos from Tik Tok to your Instagram account. You must enter the username and password and slee

Mohammed 19 Dec 01, 2022
A fork of discord.py for anime enjoyers

A modern, easy to use, feature-rich, and async ready API wrapper for Discord written in Python. Key Features Modern Pythonic API using async and await

Senpai Development 4 Nov 05, 2021