Project Aquarium is a SUSE-sponsored open source project aiming at becoming an easy to use, rock solid storage appliance based on Ceph.

Overview

Project Aquarium

Website

GitHub Repo stars

GitHub last commit Lines of code GitHub contributors GitHub issues GitHub milestones

Project Aquarium is a SUSE-sponsored open source project aiming at becoming an easy to use, rock solid storage appliance based on Ceph.

We are investigating the beginnings of a new storage appliance project in an opinionated fashion. The Aquarium project is split into two clearly defined work streams: Gravel (backend) and Glass (frontend).

Aquarist Labs is licensed under LGPL version 2.1. We do not require assignment of a copyright to contribute code; code is contributed under the terms of the applicable license.

How do I get started?

Look at the issue list or check out our Slack channel (see below) and ask one of the friendly contributors. You can also view our project board and check our Review Guidelines.

If you want to get your hands dirty as soon as possible, you can also run the script at tools/setup-dev.sh. This will ensure you have a basic development environment as soon as possible so you can start hacking.

You will be able to find the backend bits in src/gravel, while the frontend bits are located in src/glass.

Check out our From Zero to Hacking quickstart to help you get off your feet.

Where can I get more help, if I need it?

Join us on Slack! You can sign up here.

We have the following channels:

  • #announcements: For all announcements related to Aquarist Labs and the Aquarium project
  • #aquarium: For all conversation and questions surrounding the Aquarium project
  • #general: Show us your best gif!
  • #github-notifications: Notifications from the github app.

If you have a new idea, or want to discuss any implementation details, we recommend using our Discussion page on GitHub.

Checking out the source

You can clone from github with

git clone [email protected]:aquarist-labs/aquarium

or, if you are not a github user,

git clone git://github.com/aquarist-labs/aquarium
Comments
  • Rewrite the kiwi without MicroOS and remove non essential parts

    Rewrite the kiwi without MicroOS and remove non essential parts

    Same as #316 just remove all the commits by a new branch instead. Removing dependency from MicroOS Create LiveISO image type with persistent storage Updated vagrant image and add VirtualBox support.

    Signed-off-by: Alex Lau (AvengerMoJo) [email protected]

    enhancement tooling images 
    opened by AvengerMoJo 50
  • gravel: requires Python 3.7+ ?

    gravel: requires Python 3.7+ ?

    I'm not really sure if it's actually a bug and Python 3.7+ is required (and the issue can just be closed). Just in case it's not, I like to raise the issue here. So... on my local environment I noticed the following issue when running tox:

    tox
    py3 installed: aiofiles==0.6.0,attrs==20.3.0,click==7.1.2,dataclasses==0.8,fastapi==0.63.0,h11==0.12.0,importlib-metadata==3.10.0,iniconfig==1.1.1,packaging==20.9,pluggy==0.13.1,py==1.10.0,pydantic==1.7.3,pyfakefs==4.4.0,pyparsing==2.4.7,pytest==6.2.2,pytest-asyncio==0.14.0,pytest-datadir==1.3.1,pytest-mock==3.5.1,starlette==0.13.6,toml==0.10.2,typing-extensions==3.7.4.3,uvicorn==0.13.3,websockets==8.1,zipp==3.4.1
    py3 runtests: PYTHONHASHSEED='2579776963'
    py3 runtests: commands[0] | pytest gravel/
    ============================================================================================================ test session starts ============================================================================================================
    platform linux -- Python 3.6.12, pytest-6.2.2, py-1.10.0, pluggy-0.13.1
    rootdir: /.../src/aquarium/src, configfile: tox.ini
    plugins: datadir-1.3.1, pyfakefs-4.4.0, asyncio-0.14.0, mock-3.5.1
    collected 17 items                                                                                                                                                                                                                          
    
    gravel/tests/unit/cephadm/test_cephadm.py .......                                                                                                                                                                                     [ 41%]
    gravel/tests/unit/controllers/test_config.py ...                                                                                                                                                                                      [ 58%]
    gravel/tests/unit/controllers/test_gstate.py .F                                                                                                                                                                                       [ 70%]
    gravel/tests/unit/controllers/orch/test_ceph.py .....                                                                                                                                                                                 [100%]
    
    ================================================================================================================= FAILURES ==================================================================================================================
    _______________________________________________________________________________________________________________ test_tickers ________________________________________________________________________________________________________________
    
    gstate = <gravel.controllers.gstate.GlobalState object at 0x7fdae58bfb00>
    
        @pytest.mark.asyncio
        async def test_tickers(gstate):
            from gravel.controllers.gstate import Ticker
        
            class TestTicker(Ticker):
                def __init__(self, name):
                    super().__init__(name, 1.0)
                    self.has_ticked = False
        
                async def _do_tick(self) -> None:
                    self.has_ticked = True
        
                async def _should_tick(self) -> bool:
                    return not self.has_ticked
        
            ticker = TestTicker("test")
            assert "test" in gstate.tickers
        
    >       await gstate._do_ticks()  # pyright: reportPrivateUsage=false
    
    gravel/tests/unit/controllers/test_gstate.py:31: 
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
    
    self = <gravel.controllers.gstate.GlobalState object at 0x7fdae58bfb00>
    
        async def _do_ticks(self) -> None:
            for desc, ticker in self.tickers.items():
                logger.debug(f"tick {desc}")
    >           asyncio.create_task(ticker.tick())
    E           AttributeError: module 'asyncio' has no attribute 'create_task'
    
    gravel/controllers/gstate.py:147: AttributeError
    ========================================================================================================== short test summary info ==========================================================================================================
    FAILED gravel/tests/unit/controllers/test_gstate.py::test_tickers - AttributeError: module 'asyncio' has no attribute 'create_task'
    ======================================================================================================= 1 failed, 16 passed in 0.36s ========================================================================================================
    ERROR: InvocationError: '/.../src/aquarium/src/.tox/py3/bin/pytest gravel/'
    
    bug question milestone: recommended 
    opened by s0nea 42
  • deps: Fix potential dependency issues on dev machines

    deps: Fix potential dependency issues on dev machines

    Because setup-dev.sh is ran on the developers machine, it is not okay to use the system packages which may conflict with the requirements.txt aquarium is trying to install (for example, the system packages may already supply a dependency which will mean that pip will then not install it into the venv).

    Instead we should ensure the venv is created without system packages. This is what is eventually copied into the virtual machine. Before we copy it in though we need to re-enable the system packages for librados to work, so we do that manually with sed.

    Signed-off-by: Joshua Hesketh [email protected]

    documentation 
    opened by jhesketh 27
  • [tool] Remove repo install kiwi with pip for Debian and Ubuntu also update config.sh

    [tool] Remove repo install kiwi with pip for Debian and Ubuntu also update config.sh

    Replace the kiwi package install with pip instead. Update the config.sh remove baseCleanMount replace the vagrant setup with baseVagrantSetup

    Signed-off-by: Alex Lau (AvengerMoJo) [email protected]

    opened by AvengerMoJo 25
  • Introduce runtime python venv for dependencies, add Makefile

    Introduce runtime python venv for dependencies, add Makefile

    This is work towards being able to have an actual package (rpm, deb, ...) of Aquarium (see https://github.com/aquarist-labs/aquarium/issues/91).

    I've added a Makefile with a dist target, so you can now run make dist to get a tarball named something like aquarium-0.1.0-0-gc28eb76.tar.gz, which includes a built glass and all the necessary bits of gravel. It also includes all our python dependencies (per src/requirements.txt) in /usr/share/aquarium/venv, so we don't have to worry about not having packaged versions of these things on whatever distros we deploy on.

    This doesn't change the current dev workflow at all. You still build an image by running ./tools/build-image.sh, but that script will in turn call make dist to get a tarball to install in the image. In future (once I've got a spec file and rpm build sorted out), this can be changed so that the kiwi config uses that actual package, instead of the tarball.

    That said, if you don't want to build an image, but would rather try a manual Aquarium install on some random Linux, you could run make dist, then take the tarball and extract it on the system you want to deploy on. Might be a bit of fun ;-)

    Note: the version string used in the tarball name is based on the latest annotated tag in the form 'vX.Y.Z', which means I've suddenly introduced the notion of actual version numbers and releases to the project. Sorry.

    Fixes: https://github.com/aquarist-labs/aquarium/issues/277 Signed-off-by: Tim Serong [email protected]

    WIP feature glass needs-rebase tooling images 
    opened by tserong 25
  • tools/aqua: add multiple deployment types

    tools/aqua: add multiple deployment types

    Signed-off-by: Kyr Shatskyy [email protected]

    Checklist

    • [ ] References issues, create if required
    • [ ] Updates documentation if necessary
    • [ ] Includes tests for new functionality or reproducer for bug

    Show available Jenkins commands
    • jenkins test tumbleweed
    • jenkins run tumbleweed
    • jenkins test leap
    • jenkins run leap
    CI tooling 
    opened by kshtsk 24
  • tool: add tool to deal with vagrant deployments, drop 'setup.sh'

    tool: add tool to deal with vagrant deployments, drop 'setup.sh'

    Inspired by sesdev.

    Hopefully will consolidate things a bit more for us, and especially newcomers, than a bunch of scripts spread throughout.

    Stretch goal, eventually, will be to also get image builds going through this script.

    Signed-off-by: Joao Eduardo Luis <[email protected]>

    documentation feature tooling 
    opened by jecluis 24
  • gravel: replace etcd with kvstore backed by ceph itself

    gravel: replace etcd with kvstore backed by ceph itself

    This is a bit rough. There's all sorts of sharp corners you can cut your fingers on. Also, I haven't actually removed the etcd bootstrap bits yet, and I haven't touched any of the tests. Still, it does actually work. Well... Almost. I just tried adding a second node, and it's failing with "assert ntp_addr" in gravel/controllers/nodes/deployment.py's join() for some reason. I'm not sure yet if that's due to this change or not. Still, feedback on the general approach would be greatly appreciated :-)

    Signed-off-by: Tim Serong [email protected]

    Checklist

    • [ ] References issues, create if required
    • [ ] Updates documentation if necessary
    • [ ] Includes tests for new functionality or reproducer for bug

    Show available Jenkins commands
    • jenkins test tumbleweed
    • jenkins run tumbleweed
    • jenkins test leap
    • jenkins run leap
    documentation enhancement gravel 
    opened by tserong 20
  • Completely replace existing MicroOS kiwi

    Completely replace existing MicroOS kiwi

    MicroOS using cutomized liveiso persistent script that is not easy to debug. Since we are not using all the distribution profile in the MicroOS kiwi configuration. I rewrite the kiwi config with the liveiso being persistent by the driver available storage

    images 
    opened by AvengerMoJo 20
  • gravel/glass: user management

    gravel/glass: user management

    The default credentials set up during deployment are: admin/aquarium

    Peek 2021-06-25 17-27

    Peek 2021-06-25 17-40

    Fixes: https://github.com/aquarist-labs/aquarium/issues/421 Fixes: https://github.com/aquarist-labs/aquarium/issues/23 Fixes: https://github.com/aquarist-labs/aquarium/issues/26

    Signed-off-by: Volker Theile [email protected]

    Checklist

    • [x] References issues, create if required
    • [ ] Updates documentation if necessary
    • [ ] Includes tests for new functionality or reproducer for bug

    Show available Jenkins commands
    • jenkins test tumbleweed
    • jenkins run tumbleweed
    • jenkins test leap
    • jenkins run leap
    feature glass gravel prio: medium aqr: Must Have 
    opened by votdev 19
  • Use python black

    Use python black

    This change is purely to do with formatting and also likely purely subjective.

    However, there have been a few times in reviews that people have had different styles and that has caused either confusion or a desire to consolidate.

    Black takes all these arguments away by being the dictator in what is correct. Read more about it here: https://black.readthedocs.io/en/stable/index.html

    As this is very subjective, we should make sure people are onboard with this styling before merging it.

    gravel prio: high 
    opened by jhesketh 19
  • Join fails with

    Join fails with "Failed to bootstrap the system: SSL Error."

    Seen while testing #758. Tried to join a new node to the cluster, and got this:

    image

    From a quick grep through src/gravel/controllers/deployment/join.py, it looks like we might be trying to default to https:// when calling /api/deploy/join/request on the existing host, but that's never going to work until #759 goes in.

    bug 
    opened by tserong 0
  • Why allow custom container image to be specified when _joining_ node to existing cluster?

    Why allow custom container image to be specified when _joining_ node to existing cluster?

    Seen while testing #758. When joining a new node to an existing cluster, the Networking page asks if you want to use the default image, or a custom image. Why allow a different image to be specified for nodes that are joining? Shouldn't the image to use be a cluster-wide setting, and only need to be specified on the first node, when you create the cluster? Or am I missing something?

    bug glass gravel 
    opened by tserong 1
  • Storage page of installer should allow selecting all storage with one click

    Storage page of installer should allow selecting all storage with one click

    Seen while playing with #758. The Storage page shows a list of disks you can select to use for storage, and if you want to use all of them, you have to click each one individually. It'd be nice if there were a way to select all disks with one click (maybe a checkbox at the top in the header line?)

    feature glass 
    opened by tserong 0
  • Invalid container image name errors are also spectacularly inscrutable :-)

    Invalid container image name errors are also spectacularly inscrutable :-)

    While testing #758 I had a similar experience to #707 when specifying a bogus container image name:

    nonexistent-image

    This results in a brief "Http failure response for [...]/api/deploy/create: 400 Bad Request" when you hit the "Install" button:

    bad-request

    journalctl -u aquarium just says:

    Dec 21 07:52:40 node1 uvicorn[1446]: INFO:     2021-12-21 07:52:40 -- mgr -- Attempt to create a new deployment.
    Dec 21 07:52:42 node1 uvicorn[1446]: ERROR:    2021-12-21 07:52:42 -- create -- Unable to create deployment: pre-checks failed:
    Dec 21 07:52:42 node1 uvicorn[1446]: ERROR:    2021-12-21 07:52:42 -- mgr -- Error creating a new deployment: Pre-checks failed, unable to create.
    

    The debug log isn't really any more enlightening:

    DEBUG:    2021-12-21 07:56:18 -- deploy -- Create new deployment.
    INFO:     2021-12-21 07:56:18 -- mgr -- Attempt to create a new deployment.
    DEBUG:    2021-12-21 07:56:18 -- create -- Preflight checks: registry='registry.opensuse.org' image='filesystems/ceph/master/.../this-does-not-exist' secure=True
    DEBUG:    2021-12-21 07:56:18 -- connectionpool -- Starting new HTTPS connection (1): registry.opensuse.org:443
    DEBUG:    2021-12-21 07:56:19 -- connectionpool -- https://registry.opensuse.org:443 "GET /v2/ HTTP/1.1" 200 2
    ERROR:    2021-12-21 07:56:19 -- create -- Unable to create deployment: pre-checks failed: 
    ERROR:    2021-12-21 07:56:19 -- mgr -- Error creating a new deployment: Pre-checks failed, unable to create.
    

    Looking at registry_check() in src/gravel/controllers/containers.py, there seems to be plenty of good error messages attached to the various exceptions that are raised, but these don't seem to make it back into the log file, or to the UI.

    Also, semi-related: should we really be splitting the Image URL into "Image registry URL" and "Image Name" in the UI? Wouldn't it be more intuitive to just have the image URL as a single field?

    bug glass gravel 
    opened by tserong 0
  • [RFC] doc/spec: document host requirements

    [RFC] doc/spec: document host requirements

    Signed-off-by: Mykola Golub [email protected]

    Checklist

    • [ ] References issues, create if required
    • [ ] Updates documentation if necessary
    • [ ] Includes tests for new functionality or reproducer for bug

    Show available Jenkins commands
    • jenkins run tumbleweed
    • jenkins run leap
    • jenkins run ubuntu
    documentation 
    opened by trociny 4
Releases(v0.4.2)
Owner
Aquarist Labs
We perform experiments on Cephalopods and put them into pretty containers.
Aquarist Labs
Human segmentation models, training/inference code, and trained weights, implemented in PyTorch

Human-Segmentation-PyTorch Human segmentation models, training/inference code, and trained weights, implemented in PyTorch. Supported networks UNet: b

Thuy Ng 474 Dec 19, 2022
Neural Logic Inductive Learning

Neural Logic Inductive Learning This is the implementation of the Neural Logic Inductive Learning model (NLIL) proposed in the ICLR 2020 paper: Learn

36 Nov 28, 2022
CVPR 2021: "The Spatially-Correlative Loss for Various Image Translation Tasks"

Spatially-Correlative Loss arXiv | website We provide the Pytorch implementation of "The Spatially-Correlative Loss for Various Image Translation Task

Chuanxia Zheng 89 Jan 04, 2023
Repository of best practices for deep learning in Julia, inspired by fastai

FastAI Docs: Stable | Dev FastAI.jl is inspired by fastai, and is a repository of best practices for deep learning in Julia. Its goal is to easily ena

FluxML 532 Jan 02, 2023
PyTorch implementations of deep reinforcement learning algorithms and environments

Deep Reinforcement Learning Algorithms with PyTorch This repository contains PyTorch implementations of deep reinforcement learning algorithms and env

Petros Christodoulou 4.7k Jan 04, 2023
MAU: A Motion-Aware Unit for Video Prediction and Beyond, NeurIPS2021

MAU (NeurIPS2021) Zheng Chang, Xinfeng Zhang, Shanshe Wang, Siwei Ma, Yan Ye, Xinguang Xiang, Wen GAo. Official PyTorch Code for "MAU: A Motion-Aware

ZhengChang 20 Nov 25, 2022
S2s2net - Sentinel-2 Super-Resolution Segmentation Network

S2S2Net Sentinel-2 Super-Resolution Segmentation Network Getting started Install

Wei Ji 10 Nov 10, 2022
Computer Vision application in the web

Computer Vision application in the web Preview Usage Clone this repo git clone https://github.com/amineHY/WebApp-Computer-Vision-streamlit.git cd Web

Amine Hadj-Youcef. PhD 35 Dec 06, 2022
Official code of the paper "ReDet: A Rotation-equivariant Detector for Aerial Object Detection" (CVPR 2021)

ReDet: A Rotation-equivariant Detector for Aerial Object Detection ReDet: A Rotation-equivariant Detector for Aerial Object Detection (CVPR2021), Jiam

csuhan 334 Dec 23, 2022
A Multi-modal Perception Tracker (MPT) for speaker tracking using both audio and visual modalities

MPT A Multi-modal Perception Tracker (MPT) for speaker tracking using both audio and visual modalities. Implementation for our AAAI 2022 paper: Multi-

yidiLi 4 May 08, 2022
Pytorch implementation of Implicit Behavior Cloning.

Implicit Behavior Cloning - PyTorch (wip) Pytorch implementation of Implicit Behavior Cloning. Install conda create -n ibc python=3.8 pip install -r r

Kevin Zakka 49 Dec 25, 2022
PyTorch implementation of DeepLab v2 on COCO-Stuff / PASCAL VOC

DeepLab with PyTorch This is an unofficial PyTorch implementation of DeepLab v2 [1] with a ResNet-101 backbone. COCO-Stuff dataset [2] and PASCAL VOC

Kazuto Nakashima 995 Jan 08, 2023
Official PyTorch implementation for "Low Precision Decentralized Distributed Training with Heterogenous Data"

Low Precision Decentralized Training with Heterogenous Data Official PyTorch implementation for "Low Precision Decentralized Distributed Training with

Aparna Aketi 0 Nov 23, 2021
Moiré Attack (MA): A New Potential Risk of Screen Photos [NeurIPS 2021]

Moiré Attack (MA): A New Potential Risk of Screen Photos [NeurIPS 2021] This repository is the official implementation of Moiré Attack (MA): A New Pot

Dantong Niu 22 Dec 24, 2022
A PyTorch-based Semi-Supervised Learning (SSL) Codebase for Pixel-wise (Pixel) Vision Tasks

PixelSSL is a PyTorch-based semi-supervised learning (SSL) codebase for pixel-wise (Pixel) vision tasks. The purpose of this project is to promote the

Zhanghan Ke 255 Dec 11, 2022
Framework for Spectral Clustering on the Sparse Coefficients of Learned Dictionaries

Dictionary Learning for Clustering on Hyperspectral Images Overview Framework for Spectral Clustering on the Sparse Coefficients of Learned Dictionari

Joshua Bruton 6 Oct 25, 2022
Continuous Augmented Positional Embeddings (CAPE) implementation for PyTorch

PyTorch implementation of Continuous Augmented Positional Embeddings (CAPE), by Likhomanenko et al. Enhance your Transformer positional embeddings with easy-to-use augmentations!

Guillermo Cámbara 26 Dec 13, 2022
Alternatives to Deep Neural Networks for Function Approximations in Finance

Alternatives to Deep Neural Networks for Function Approximations in Finance Code companion repo Overview This is a repository of Python code to go wit

15 Dec 17, 2022
Perturb-and-max-product: Sampling and learning in discrete energy-based models

Perturb-and-max-product: Sampling and learning in discrete energy-based models This repo contains code for reproducing the results in the paper Pertur

Vicarious 2 Mar 14, 2022
Image Captioning using CNN ,LSTM and Attention

Image Captioning using CNN ,LSTM and Attention This is a deeplearning model which tries to summarize an image into a text . Installation Install this

ASUTOSH GHANTO 1 Dec 16, 2021