forked from uncloud/uncloud
82 lines
2.1 KiB
Markdown
82 lines
2.1 KiB
Markdown
## Introduction
|
|
|
|
This article describes how models relate to each other and what the
|
|
design ideas are. It is meant to prevent us from double implementing
|
|
something or changing something that is already solved.
|
|
|
|
|
|
## Products
|
|
|
|
A product is something someone can order. We might have "low level"
|
|
products that need to be composed (= higher degree of flexibility, but
|
|
more amount of details necessary) and "composed products" that present
|
|
some defaults or select other products automatically (f.i. a "dual
|
|
stack VM" can be a VM + a disk + an IPv4 address).
|
|
|
|
|
|
## Bills
|
|
|
|
Bills represent active orders of a month. Bills can be shown during a
|
|
month but only become definitive at the end of the month.
|
|
|
|
## Orders
|
|
|
|
When customer X order a (set) of product, it generates an order for billing
|
|
purposes. The ordered products point to that order and register an Order Record
|
|
at creation.
|
|
|
|
Orders and Order Records are assumed immutable => they are used to generate
|
|
bills and should not be mutated. If a product is updated (e.g. adding RAM to
|
|
VM), a new order should be generated.
|
|
|
|
The order MUST NOT be deleted when a product is deleted, as it is used for
|
|
billing (including past bills).
|
|
|
|
### Order record
|
|
|
|
Used to store billing details of a product at creation: will stay there even if
|
|
the product change (e.g. new pricing, updated) and act as some kind of archive.
|
|
Used to generate bills.
|
|
|
|
## Payment Methods
|
|
|
|
Users/customers can register payment methods.
|
|
|
|
## Sample flows / products
|
|
|
|
### A VM snapshot
|
|
|
|
A VM snapshot creates a snapshot of all disks attached to a VM to be
|
|
able to rollback the VM to a previous state.
|
|
|
|
Creating a VM snapshot (-product) creates a related order. Deleting a
|
|
VMSnapshotproduct sets the order to deleted.
|
|
|
|
### Object Storage
|
|
|
|
(tbd by Balazs)
|
|
|
|
### A "raw" VM
|
|
|
|
(tbd by Ahmed)
|
|
|
|
### An IPv6 only VM
|
|
|
|
(tbd by Ahmed)
|
|
|
|
### A dual stack VM
|
|
|
|
(tbd by Ahmed)
|
|
|
|
### A managed service (e.g. Matrix-as-a-Service)
|
|
|
|
Customer orders service with:
|
|
* Service-specific configuration: e.g. domain name for matrix
|
|
* VM configuration:
|
|
- CPU
|
|
- Memory
|
|
- Disk (soon)
|
|
|
|
It creates a new Order with two products/records:
|
|
* Service itself (= management)
|
|
* Underlying VM
|