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
Bot to notify when vaccine appointments are available

Vaccine Watch Bot to notify when vaccine appointments are available. Supports checking Hy-Vee, Walgreens, CVS, Walmart, Cosentino's stores (KC), and B

Peter Carnesciali 37 Aug 13, 2022
PyDottie is a version of Dottie.js written in Python 3.

PyDottie is a version of Dottie.js written in Python 3.

Jose Noriega 2 Nov 21, 2021
Telegram bot to stream videos in telegram voicechat for both groups and channels

Telegram bot to stream videos in telegram voicechat for both groups and channels. Supports live streams, YouTube videos and telegram media. With record stream support, Schedule streams, and many more

ALBY 9 Feb 20, 2022
A comand-line utility for taking automated screenshots of websites

shot-scraper A comand-line utility for taking automated screenshots of websites For background on this project see shot-scraper: automated screenshots

Simon Willison 837 Jan 07, 2023
A simple program to display current playing from Spotify app on your desktop

WallSpot A simple program to display current playing from Spotify app on your desktop How to Use: Linux: Currently Supports GNOME and KDE. If you want

Nannan 4 Feb 19, 2022
Mailjet API implementation in Python

READ THIS FIRST!! This repository isn't compatible with the current Mailjet API (v3) and, as a consequence, is considered deprecated and won't undergo

Rick van Hattem 18 Oct 21, 2022
Data portal client and server for NMDC.

NMDC Server and Client Portal Getting started with Docker install ldc install submodules via git submodule update --init --recursive In order to popul

National Microbiome Data Collaborative 7 Dec 14, 2022
A discord.py code generator program. Compatible with both linux and windows.

Astro-Cord A discord.py code generator program. Compatible with both linux and windows. About This is a program made to make discord.py bot developmen

Astro Inc. 2 Dec 23, 2021
ZenML 🙏: MLOps framework to create reproducible ML pipelines for production machine learning.

ZenML is an extensible, open-source MLOps framework to create production-ready machine learning pipelines. It has a simple, flexible syntax, is cloud and tool agnostic, and has interfaces/abstraction

ZenML 2.6k Dec 27, 2022
Converts a text file of songs to a playlist on your Spotify account.

Playlist Converter Convert a text file of songs to a playlist on your Spotify account. Create your playlists faster instead of manually searching for

Priya Aggarwal 18 Dec 21, 2022
A website application running in Google app engine, deliver rss news to your kindle. generate mobi using python, multilanguages supported.

Readme of english version refers to Readme_EN.md 简介 这是一个运行在Google App Engine(GAE)上的Kindle个人推送服务应用,生成排版精美的杂志模式mobi/epub格式自动每天推送至您的Kindle或其他邮箱。 此应用目前的主要

2.6k Jan 06, 2023
A liblary whre you can find helpful functions for your discord bot

DBotUtils A liblary whre you can find helpful functions for your discord bot Easy setup Setup is easily and flexible. Change anytime. After setup just

Kondek286 1 Nov 02, 2021
A bot can be used to broadcast your messages ( Text & Media ) to the Subscribers

Broadcast Bot A Telegram bot to send messages and medias to the subscribers directly through bot. Authorized users of the bot can send messages (Texts

Shabin-k 8 Oct 21, 2022
NFT Generator: A modular NFT generator application

NFT Generator A simple passion project done with the role to learn a bit about h

2 Aug 30, 2022
A robust, low-level connector for the Discord API

Bauxite Bauxite is a robust, low-level connector for the Discord API. What is Bauxite for? Bauxite is made for two main purposes: Creating higher-leve

1 Dec 04, 2021
TeamDltvideo Bot you can add in your Telegram Group Thanks

TeamDltvideo TeamDltvideo Bot you can add in your Telegram Group Thanks Video Stream is a telegram bot project that's allow you to play video on teleg

TeamDlt 1 Nov 18, 2021
A python package to easy the integration with Direct Online Pay (Mpesa, TigoPesa, AirtelMoney, Card Payments)

python-dpo A python package to easy the integration with Direct Online Pay (DPO) which easily allow you easily integrate with payment options once wit

NEUROTECH 15 Oct 08, 2022
Multi-purpose bot made with discord.py

PizzaHat Discord Bot A multi-purpose bot for your server! ℹ️ • Info PizzaHat is a multi-purpose bot, made to satisfy your needs, as well as your serve

DTS 28 Dec 16, 2022
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
YouTube-Discord-Bot - Discord Bot to Search YouTube

YouTube Bot Info YouTube Bot is a discord bot where you can search for anything

Riceblades11 10 Mar 05, 2022