# Directory Structure
```
├── .editorconfig
├── .gitignore
├── .gitlab-ci.yml
├── .pre-commit-config.yaml
├── .python-version
├── LICENSE.md
├── pyproject.toml
├── README.md
├── RELEASING.md
├── src
│ └── waldur_mcp_server
│ ├── __init__.py
│ ├── meta.yaml
│ └── server.py
└── uv.lock
```
# Files
--------------------------------------------------------------------------------
/.python-version:
--------------------------------------------------------------------------------
```
3.13
```
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
```
[*]
indent_style = space
indent_size = 4
insert_final_newline = true
trim_trailing_whitespace = true
end_of_line = lf
charset = utf-8
[*.py]
max_line_length = 88
[*.yaml]
indent_size = 2
```
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
```
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# Virtual Environment
venv/
env/
ENV/
.env
# IDE
.idea/
.vscode/
*.swp
*.swo
.DS_Store
# Project specific
*.log
.coverage
htmlcov/
.pytest_cache/
.env.local
.env.*.local
# Environment variables file that might contain sensitive data
.env
.env.prod
.env.staging
```
--------------------------------------------------------------------------------
/.pre-commit-config.yaml:
--------------------------------------------------------------------------------
```yaml
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v5.0.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- repo: https://github.com/charliermarsh/ruff-pre-commit
rev: v0.12.0
hooks:
- id: ruff-format
- id: ruff
args:
- --fix
- --exit-non-zero-on-fix
- repo: https://github.com/pre-commit/mirrors-mypy
rev: v1.15.0
hooks:
- id: mypy
```
--------------------------------------------------------------------------------
/.gitlab-ci.yml:
--------------------------------------------------------------------------------
```yaml
include:
- project: "waldur/waldur-pipelines"
file: "/templates/stages.yml"
- project: "waldur/waldur-pipelines"
file: "/templates/test/check-merge-compatibility.yml"
- project: "waldur/waldur-pipelines"
file: "/templates/test/python-linters.yml"
- project: "waldur/waldur-pipelines"
file: "/templates/release/python-module-release-uv.yml"
Run python v3.11 linters:
image: "registry.hpc.ut.ee/mirror/library/python:3.11"
extends: .Run linters template
before_script:
- |
echo 'default_language_version:' >> .pre-commit-config.yaml
echo ' python: python3.11' >> .pre-commit-config.yaml
- cat .pre-commit-config.yaml
Upload docs:
image:
name: registry.hpc.ut.ee/mirror/alpine/git:v2.30.2
entrypoint: [""]
stage: deploy
interruptible: true
rules:
- if: '$CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "schedule"'
script:
- cd /tmp/
- git clone "https://gitlab-ci-token:$GITLAB_TOKEN@$CI_SERVER_HOST/waldur/waldur-docs.git"
- git config --global user.name "$GITLAB_USER_NAME"
- git config --global user.email "$GITLAB_USER_EMAIL"
- cd waldur-docs/
- mkdir -p docs/integrations/waldur-mcp-server
- cp -vf $CI_PROJECT_DIR/README.md docs/integrations/waldur-mcp-server/README.md
- git add docs/integrations/waldur-mcp-server/
- git commit -m 'Update Waldur MCP Server docs' || exit 0
- git branch new-mcp-server-docs
- git push --set-upstream origin new-mcp-server-docs:master
```
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
```markdown
# Waldur MCP server
Waldur MCP server enables integration between Waldur instance and Claude Desktop by implementing the Model Context Protocol (MCP). This allows Claude to interact with your Waldur instance directly.
## Quickstart
1. Install Claude Desktop for your platform from the [Claude Desktop releases page](https://claude.ai/download)
2. Install Python 3.13 or higher.
3. Install uv package manager.
### Installation
To install the package:
```bash
pip install waldur-mcp-server
```
Or with uv:
```bash
uv pip install waldur-mcp-server
```
### Generate Waldur Token
1. Log in to your Waldur instance
2. Navigate to Username > Credentials > API Token
3. Generate a new token with appropriate token lifetime - you'll need it for configuration
### Claude Desktop MCP Server Configuration
On Windows: `%APPDATA%\Claude\claude_desktop_config.json`
On MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
<details>
<summary>Development/Unpublished Servers Configuration</summary>
```json
{
"mcpServers": {
"waldur-mcp-server": {
"command": "uv",
"args": [
"--directory",
"C:\\waldur_service",
"run",
"waldur-mcp-server"
],
"env": {
"WALDUR_API_URL": "https://your-waldur-instance",
"WALDUR_TOKEN": "your-token"
}
}
}
}
```
</details>
<details>
<summary>Published Servers Configuration</summary>
```json
{
"mcpServers": {
"waldur-mcp-server": {
"command": "uvx",
"args": [
"waldur-mcp-server"
],
"env": {
"WALDUR_API_URL": "https://your-waldur-instance",
"WALDUR_TOKEN": "your-token"
}
}
}
}
```
</details>
### Debugging
On macOS, log files are located at `~/Library/Logs/Claude/mcp.log`
If you encounter a `spawn uvx ENOENT` error, verify that your PATH environment variable includes the Python installation directory where `uv` is installed. Alternatively, you can specify the full path to `uvx` in the configuration file, for example:
`~/Library/Frameworks/Python.framework/Versions/3.13/bin/uvx`
Since MCP servers run over stdio, debugging can be challenging. For the best debugging
experience, we strongly recommend using the [MCP Inspector](https://github.com/modelcontextprotocol/inspector).
You can launch the MCP Inspector via [`npm`](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm) with this command:
```bash
npx @modelcontextprotocol/inspector uv --directory C:\\waldur_service run waldur-mcp-server
```
When debugging, you'll need to set the required environment variables. Upon launching, the Inspector will display a URL that you can access in your browser to begin debugging.
### Common issues
- Invalid token: Verify token permissions and expiration
- Connection issues: Check WALDUR_API_URL is accessible
```
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
```markdown
The MIT License (MIT)
Copyright (c) 2016-2025 OpenNode LLC
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
```
--------------------------------------------------------------------------------
/src/waldur_mcp_server/__init__.py:
--------------------------------------------------------------------------------
```python
from . import server
import asyncio
def main():
"""Main entry point for the package."""
asyncio.run(server.main())
# Optionally expose other important items at package level
__all__ = ["main", "server"]
```
--------------------------------------------------------------------------------
/pyproject.toml:
--------------------------------------------------------------------------------
```toml
[project]
name = "waldur-mcp-server"
version = "0.1.0"
description = "Waldur MCP server project"
readme = "README.md"
requires-python = ">=3.13"
dependencies = [
"httpx>=0.28.1",
"mcp>=1.6.0",
"waldur-api-client==0.2.0",
]
[build-system]
requires = [ "hatchling",]
build-backend = "hatchling.build"
[project.scripts]
waldur-mcp-server = "waldur_mcp_server:main"
```
--------------------------------------------------------------------------------
/RELEASING.md:
--------------------------------------------------------------------------------
```markdown
# Releasing Waldur MCP Server
## Releasing a New Version via GitLab CI
To deploy a new release:
1. Create and push a new tag:
```bash
git tag 0.1.0
git push origin 0.1.0
```
2. The CI pipeline will automatically build and publish the package to PyPI.
## Building and Publishing manually
To prepare the package for distribution:
1. Sync dependencies and update lockfile:
```bash
uv sync
```
2. Build package distributions:
```bash
uv build
```
This will create source and wheel distributions in the `dist/` directory.
3. Publish to PyPI:
```bash
uv publish
```
Note: You'll need to set PyPI credentials via environment variables or command flags:
- Token: `--token` or `UV_PUBLISH_TOKEN`
- Or username/password: `--username`/`UV_PUBLISH_USERNAME` and `--password`/`UV_PUBLISH_PASSWORD`
```
--------------------------------------------------------------------------------
/src/waldur_mcp_server/server.py:
--------------------------------------------------------------------------------
```python
import os
from typing import Any, Literal
from mcp.server.fastmcp import FastMCP
from waldur_api_client.api.customers import customers_list
from waldur_api_client.api.invoices import invoices_list
from waldur_api_client.api.marketplace_public_offerings import (
marketplace_public_offerings_list,
)
from waldur_api_client.api.marketplace_resources import marketplace_resources_list
from waldur_api_client.api.projects import projects_list
from waldur_api_client.api.query import query as api_query
from waldur_api_client.api.roles import roles_list
from waldur_api_client.api.user_invitations import user_invitations_create
from waldur_api_client.client import AuthenticatedClient
from waldur_api_client.models.invitation import Invitation
from waldur_api_client.models.public_offering_details import PublicOfferingDetails
from waldur_api_client.models.invitation_request import InvitationRequest
from waldur_api_client.models.customer import Customer
from waldur_api_client.models.invoice import Invoice
from waldur_api_client.models.resource import Resource
from waldur_api_client.models.project import Project
from waldur_api_client.models.query_request import QueryRequest
# Get credentials from environment variables
api_url = os.getenv("WALDUR_API_URL")
token = os.getenv("WALDUR_TOKEN")
if not api_url or not token:
raise ValueError(
"WALDUR_API_URL and WALDUR_TOKEN environment variables must be set"
)
client = AuthenticatedClient(base_url=api_url, token=token)
# Create an MCP server
mcp = FastMCP("Waldur", dependencies=["httpx"])
@mcp.resource("schema://main")
async def get_schema() -> list[str]:
"""Provide the database schema as a resource"""
result = await api_query.asyncio(
client=client,
body=QueryRequest(
query="SELECT table_name FROM information_schema.tables WHERE table_schema = 'public'"
),
)
if isinstance(result, list):
return [row[0] for row in result]
return []
@mcp.tool()
async def query(sql: str) -> list[Any]:
"""Run a read-only SQL query"""
return await api_query.asyncio(client=client, body=QueryRequest(query=sql))
@mcp.prompt()
async def schema_aware_query() -> str:
with open(os.path.join(os.path.dirname(__file__), "meta.yaml")) as f:
schema = f.read()
return f"Given the following PostgreSQL database structure:\n {schema}\n compose SQL query for the following analytical query:\n"
@mcp.tool()
async def list_customers() -> list[Customer]:
"""List all customers"""
return await customers_list.asyncio(client=client)
@mcp.tool()
async def list_projects() -> list[Project]:
"""List all projects"""
return await projects_list.asyncio(client=client)
@mcp.tool()
async def list_resources() -> list[Resource]:
"""List all resources"""
return await marketplace_resources_list.asyncio(client=client)
@mcp.tool()
async def list_invoices() -> list[Invoice]:
"""List all invoices"""
return await invoices_list.asyncio(client=client)
@mcp.tool()
async def list_offerings() -> list[PublicOfferingDetails]:
"""List all offerings"""
return await marketplace_public_offerings_list.asyncio(client=client)
@mcp.tool()
async def create_invitation(
scope_type: Literal["customer", "project"],
scope_name: str,
role: str,
emails: list[str],
extra_invitation_text: str = "",
) -> list[Invitation]:
"""Invite users to project or organization by email
Args:
scope_type: Whether to invite users to organization or project
scope_name: Name of the organization or project to invite users to
role: Role to assign to invited users
emails: List of email addresses to invite
extra_invitation_text: Custom message to include in the invitation
"""
matching_roles = await roles_list.asyncio(client=client, description=role)
if not matching_roles:
raise ValueError(f"Role '{role}' not found")
role_uuid = matching_roles[0]["uuid"]
if scope_type == "customer":
matching_customers = await customers_list.asyncio(
client=client, name=scope_name
)
if not matching_customers:
raise ValueError(f"Customer '{scope_name}' not found")
scope_url = matching_customers[0]["url"]
elif scope_type == "project":
matching_projects = await projects_list.asyncio(client=client, name=scope_name)
if not matching_projects:
raise ValueError(f"Project '{scope_name}' not found")
scope_url = matching_projects[0]["url"]
if not scope_url:
raise ValueError(f"Invalid scope type: {scope_type}")
results = []
for email in emails:
result = await user_invitations_create.asyncio(
client=client,
body=InvitationRequest(
scope=scope_url,
role=role_uuid,
email=email,
extra_invitation_text=extra_invitation_text,
),
)
results.append(result)
return results
def main() -> None:
mcp.run()
if __name__ == "__main__":
main()
```
--------------------------------------------------------------------------------
/src/waldur_mcp_server/meta.yaml:
--------------------------------------------------------------------------------
```yaml
core_changeemailrequest:
app_label: core
columns:
created:
type: DateTime
email:
type: Email
id:
type: PositiveInteger
modified:
type: DateTime
user_id:
db_table: core_user
type: OneToOne
uuid:
type: UUID
model: changeemailrequest
type: Table
core_feature:
app_label: core
columns:
id:
type: PositiveInteger
key:
type: Text
value:
type: Boolean
model: feature
type: Table
core_notification:
app_label: core
columns:
created:
type: DateTime
description:
type: Char
enabled:
type: Boolean
id:
type: PositiveInteger
key:
type: Char
modified:
type: DateTime
uuid:
type: UUID
model: notification
type: Table
core_notification_templates:
columns:
id:
type: PositiveInteger
notification_id:
db_table: core_notification
type: ForeignKey
notificationtemplate_id:
db_table: core_notificationtemplate
type: ForeignKey
type: ManyToManyTable
core_notificationtemplate:
app_label: core
columns:
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
name:
type: Char
path:
type: Char
uuid:
type: UUID
model: notificationtemplate
type: Table
core_sshpublickey:
app_label: core
columns:
created:
type: DateTime
fingerprint_md5:
type: Char
fingerprint_sha256:
type: Char
fingerprint_sha512:
type: Char
id:
type: PositiveInteger
is_shared:
type: Boolean
modified:
type: DateTime
name:
type: Char
public_key:
type: Text
user_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: sshpublickey
type: Table
core_user:
app_label: core
columns:
affiliations:
type: JSON
agreement_date:
type: DateTime
backend_id:
type: Char
birth_date:
type: Date
civil_number:
type: Char
date_joined:
type: DateTime
description:
type: Char
details:
type: JSON
email:
type: Email
first_name:
type: Char
id:
type: PositiveInteger
identity_source:
type: Char
image:
type: Image
is_active:
type: Boolean
is_identity_manager:
type: Boolean
is_staff:
type: Boolean
is_superuser:
type: Boolean
is_support:
type: Boolean
job_title:
type: Char
last_login:
type: DateTime
last_name:
type: Char
last_sync:
type: DateTime
modified:
type: DateTime
native_name:
type: Char
notifications_enabled:
type: Boolean
organization:
type: Char
password:
type: Char
phone_number:
type: Char
preferred_language:
type: Char
query_field:
type: Char
registration_method:
type: Char
slug:
type: Slug
token_lifetime:
type: PositiveInteger
username:
type: Char
uuid:
type: UUID
model: user
type: Table
core_user_groups:
columns:
group_id:
db_table: auth_group
type: ForeignKey
id:
type: PositiveInteger
user_id:
db_table: core_user
type: ForeignKey
type: ManyToManyTable
core_user_user_permissions:
columns:
id:
type: PositiveInteger
permission_id:
db_table: auth_permission
type: ForeignKey
user_id:
db_table: core_user
type: ForeignKey
type: ManyToManyTable
django_content_type:
app_label: contenttypes
columns:
app_label:
type: Char
id:
type: PositiveInteger
model:
type: Char
model: contenttype
type: Table
invoices_customercredit:
app_label: invoices
columns:
apply_as_minimal_consumption:
type: Boolean
created:
type: DateTime
customer_id:
db_table: structure_customer
type: OneToOne
end_date:
type: Date
expected_consumption:
type: Decimal
grace_coefficient:
type: Decimal
id:
type: PositiveInteger
minimal_consumption_logic:
type: Char
modified:
type: DateTime
uuid:
type: UUID
value:
type: Decimal
model: customercredit
type: Table
invoices_customercredit_offerings:
columns:
customercredit_id:
db_table: invoices_customercredit
type: ForeignKey
id:
type: PositiveInteger
offering_id:
db_table: marketplace_offering
type: ForeignKey
type: ManyToManyTable
invoices_invoice:
app_label: invoices
columns:
backend_id:
type: Char
created:
type: Date
customer_id:
db_table: structure_customer
type: ForeignKey
id:
type: PositiveInteger
invoice_date:
type: Date
month:
type: PositiveSmallInteger
payment_url:
type: URL
reference_number:
type: Char
state:
type: Char
tax_percent:
type: Decimal
total_cost:
type: Decimal
total_price:
type: Decimal
uuid:
type: UUID
year:
type: PositiveSmallInteger
model: invoice
type: Table
invoices_invoiceitem:
app_label: invoices
columns:
article_code:
type: Char
backend_uuid:
type: UUID
credit_id:
db_table: invoices_customercredit
type: ForeignKey
details:
type: JSON
end:
type: DateTime
id:
type: PositiveInteger
invoice_id:
db_table: invoices_invoice
type: ForeignKey
measured_unit:
type: Char
name:
type: Text
project_id:
db_table: structure_project
type: ForeignKey
project_name:
type: Char
project_uuid:
type: Char
quantity:
type: Decimal
resource_id:
db_table: marketplace_resource
type: ForeignKey
start:
type: DateTime
unit:
type: Char
unit_price:
type: Decimal
uuid:
type: UUID
model: invoiceitem
type: Table
invoices_payment:
app_label: invoices
columns:
created:
type: DateTime
date_of_payment:
type: Date
id:
type: PositiveInteger
invoice_id:
db_table: invoices_invoice
type: ForeignKey
modified:
type: DateTime
profile_id:
db_table: invoices_paymentprofile
type: ForeignKey
proof:
type: File
sum:
type: Decimal
uuid:
type: UUID
model: payment
type: Table
invoices_paymentprofile:
app_label: invoices
columns:
attributes:
type: JSON
id:
type: PositiveInteger
is_active:
type: Boolean
name:
type: Char
organization_id:
db_table: structure_customer
type: ForeignKey
payment_type:
choices:
- display: Fixed-price contract
value: fixed_price
- display: Monthly invoices
value: invoices
- display: Payment gateways (monthly)
value: payment_gw_monthly
type: PaymentType
uuid:
type: UUID
model: paymentprofile
type: Table
invoices_projectcredit:
app_label: invoices
columns:
apply_as_minimal_consumption:
type: Boolean
created:
type: DateTime
end_date:
type: Date
expected_consumption:
type: Decimal
grace_coefficient:
type: Decimal
id:
type: PositiveInteger
mark_unused_credit_as_spent_on_project_termination:
type: Boolean
minimal_consumption_logic:
type: Char
modified:
type: DateTime
project_id:
db_table: structure_project
type: OneToOne
uuid:
type: UUID
value:
type: Decimal
model: projectcredit
type: Table
marketplace_attribute:
app_label: marketplace
columns:
created:
type: DateTime
default:
type: JSON
key:
type: Char
modified:
type: DateTime
required:
type: Boolean
section_id:
db_table: marketplace_section
type: ForeignKey
title:
type: Char
type:
type: Char
model: attribute
type: Table
marketplace_attributeoption:
app_label: marketplace
columns:
attribute_id:
db_table: marketplace_attribute
type: ForeignKey
id:
type: PositiveInteger
key:
type: Char
title:
type: Char
model: attributeoption
type: Table
marketplace_backendresource:
app_label: marketplace
columns:
backend_id:
type: Char
backend_metadata:
type: JSON
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
name:
type: Char
offering_id:
db_table: marketplace_offering
type: ForeignKey
project_id:
db_table: structure_project
type: ForeignKey
uuid:
type: UUID
model: backendresource
type: Table
marketplace_backendresourcerequest:
app_label: marketplace
columns:
created:
type: DateTime
error_message:
type: Text
error_traceback:
type: Text
finished:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
started:
type: DateTime
state:
type: FSM
uuid:
type: UUID
model: backendresourcerequest
type: Table
marketplace_category:
app_label: marketplace
columns:
backend_id:
type: Char
created:
type: DateTime
default_tenant_category:
type: Boolean
default_vm_category:
type: Boolean
default_volume_category:
type: Boolean
description:
type: Text
group_id:
db_table: marketplace_categorygroup
type: ForeignKey
icon:
type: File
id:
type: PositiveInteger
modified:
type: DateTime
title:
type: Char
uuid:
type: UUID
model: category
type: Table
marketplace_categorycolumn:
app_label: marketplace
columns:
attribute:
type: Char
category_id:
db_table: marketplace_category
type: ForeignKey
id:
type: PositiveInteger
index:
type: PositiveSmallInteger
title:
type: Char
uuid:
type: UUID
widget:
type: Char
model: categorycolumn
type: Table
marketplace_categorycomponent:
app_label: marketplace
columns:
category_id:
db_table: marketplace_category
type: ForeignKey
description:
type: Char
id:
type: PositiveInteger
measured_unit:
type: Char
name:
type: Char
type:
type: Char
uuid:
type: UUID
model: categorycomponent
type: Table
marketplace_categorycomponentusage:
app_label: marketplace
columns:
component_id:
db_table: marketplace_categorycomponent
type: ForeignKey
content_type_id:
db_table: django_content_type
type: ForeignKey
date:
type: Date
fixed_usage:
type: BigInteger
id:
type: PositiveInteger
object_id:
type: PositiveInteger
reported_usage:
type: BigInteger
model: categorycomponentusage
type: Table
marketplace_categorygroup:
app_label: marketplace
columns:
created:
type: DateTime
description:
type: Text
icon:
type: File
id:
type: PositiveInteger
modified:
type: DateTime
title:
type: Char
uuid:
type: UUID
model: categorygroup
type: Table
marketplace_categoryhelparticle:
app_label: marketplace
columns:
id:
type: PositiveInteger
title:
type: Char
url:
type: URL
model: categoryhelparticle
type: Table
marketplace_categoryhelparticle_categories:
columns:
category_id:
db_table: marketplace_category
type: ForeignKey
categoryhelparticle_id:
db_table: marketplace_categoryhelparticle
type: ForeignKey
id:
type: PositiveInteger
type: ManyToManyTable
marketplace_componentquota:
app_label: marketplace
columns:
component_id:
db_table: marketplace_offeringcomponent
type: ForeignKey
created:
type: DateTime
id:
type: PositiveInteger
limit:
type: Decimal
modified:
type: DateTime
resource_id:
db_table: marketplace_resource
type: ForeignKey
usage:
type: Decimal
model: componentquota
type: Table
marketplace_componentusage:
app_label: marketplace
columns:
backend_id:
type: Char
billing_period:
type: Date
component_id:
db_table: marketplace_offeringcomponent
type: ForeignKey
created:
type: DateTime
date:
type: DateTime
description:
type: Char
id:
type: PositiveInteger
modified:
type: DateTime
modified_by_id:
db_table: core_user
type: ForeignKey
plan_period_id:
db_table: marketplace_resourceplanperiod
type: ForeignKey
recurring:
type: Boolean
resource_id:
db_table: marketplace_resource
type: ForeignKey
usage:
type: Decimal
uuid:
type: UUID
model: componentusage
type: Table
marketplace_componentuserusage:
app_label: marketplace
columns:
backend_id:
type: Char
component_usage_id:
db_table: marketplace_componentusage
type: ForeignKey
created:
type: DateTime
description:
type: Char
id:
type: PositiveInteger
modified:
type: DateTime
usage:
type: Decimal
user_id:
db_table: marketplace_offeringuser
type: ForeignKey
username:
type: Char
uuid:
type: UUID
model: componentuserusage
type: Table
marketplace_componentuserusagelimit:
app_label: marketplace
columns:
component_id:
db_table: marketplace_offeringcomponent
type: ForeignKey
created:
type: DateTime
id:
type: PositiveInteger
limit:
type: Decimal
modified:
type: DateTime
resource_id:
db_table: marketplace_resource
type: ForeignKey
user_id:
db_table: marketplace_offeringuser
type: ForeignKey
uuid:
type: UUID
model: componentuserusagelimit
type: Table
marketplace_courseaccount:
app_label: marketplace
columns:
created:
type: DateTime
description:
type: Char
email:
type: Email
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
modified:
type: DateTime
project_id:
db_table: structure_project
type: ForeignKey
state:
choices:
- display: OK
value: 1
- display: Closed
value: 2
- display: Erred
value: 3
type: PositiveInteger
user_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: courseaccount
type: Table
marketplace_customerserviceaccount:
app_label: marketplace
columns:
created:
type: DateTime
customer_id:
db_table: structure_customer
type: ForeignKey
description:
type: Text
email:
type: Email
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
modified:
type: DateTime
preferred_identifier:
type: Char
state:
choices:
- display: OK
value: 1
- display: Closed
value: 2
- display: Erred
value: 3
type: PositiveInteger
username:
type: Char
uuid:
type: UUID
model: customerserviceaccount
type: Table
marketplace_integrationstatus:
app_label: marketplace
columns:
agent_type:
type: Char
id:
type: PositiveInteger
last_request_timestamp:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
service_name:
type: Char
status:
choices:
- display: Unknown
value: 1
- display: Active
value: 2
- display: Disconnected
value: 3
type: PositiveInteger
uuid:
type: UUID
model: integrationstatus
type: Table
marketplace_maintenanceannouncement:
app_label: marketplace
columns:
actual_end:
type: DateTime
actual_start:
type: DateTime
backend_id:
type: Char
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
external_reference_url:
type: URL
id:
type: PositiveInteger
maintenance_type:
choices:
- display: Scheduled maintenance
value: 1
- display: Emergency maintenance
value: 2
- display: Security maintenance
value: 3
- display: System upgrade
value: 4
- display: Patch deployment
value: 5
type: PositiveSmallInteger
message:
type: Char
modified:
type: DateTime
name:
type: Char
scheduled_end:
type: DateTime
scheduled_start:
type: DateTime
service_provider_id:
db_table: marketplace_serviceprovider
type: ForeignKey
state:
choices:
- display: Draft
value: 1
- display: Scheduled
value: 2
- display: In progress
value: 3
- display: Completed
value: 4
- display: Cancelled
value: 5
type: PositiveInteger
uuid:
type: UUID
model: maintenanceannouncement
type: Table
marketplace_maintenanceannouncementoffering:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
impact_description:
type: Text
impact_level:
choices:
- display: No impact
value: 1
- display: Degraded performance
value: 2
- display: Partial outage
value: 3
- display: Full outage
value: 4
type: PositiveSmallInteger
maintenance_id:
db_table: marketplace_maintenanceannouncement
type: ForeignKey
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
uuid:
type: UUID
model: maintenanceannouncementoffering
type: Table
marketplace_maintenanceannouncementofferingtemplate:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
impact_description:
type: Text
impact_level:
choices:
- display: No impact
value: 1
- display: Degraded performance
value: 2
- display: Partial outage
value: 3
- display: Full outage
value: 4
type: PositiveSmallInteger
maintenance_template_id:
db_table: marketplace_maintenanceannouncementtemplate
type: ForeignKey
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
uuid:
type: UUID
model: maintenanceannouncementofferingtemplate
type: Table
marketplace_maintenanceannouncementtemplate:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
maintenance_type:
choices:
- display: Scheduled maintenance
value: 1
- display: Emergency maintenance
value: 2
- display: Security maintenance
value: 3
- display: System upgrade
value: 4
- display: Patch deployment
value: 5
type: PositiveSmallInteger
message:
type: Char
modified:
type: DateTime
name:
type: Char
service_provider_id:
db_table: marketplace_serviceprovider
type: ForeignKey
uuid:
type: UUID
model: maintenanceannouncementtemplate
type: Table
marketplace_offering:
app_label: marketplace
columns:
access_url:
type: URL
attributes:
type: JSON
backend_id:
type: Char
backend_metadata:
type: JSON
billable:
type: Boolean
category_id:
db_table: marketplace_category
type: ForeignKey
citation_count:
type: Integer
content_type_id:
db_table: django_content_type
type: ForeignKey
country:
type: Char
created:
type: DateTime
customer_id:
db_table: structure_customer
type: ForeignKey
datacite_doi:
type: Char
description:
type: Char
error_message:
type: Text
full_description:
type: Text
getting_started:
type: Text
id:
type: PositiveInteger
image:
type: Image
integration_guide:
type: Text
latitude:
type: Float
longitude:
type: Float
modified:
type: DateTime
name:
type: Char
object_id:
type: PositiveInteger
options:
type: JSON
parent_id:
db_table: marketplace_offering
type: ForeignKey
paused_reason:
type: Text
plugin_options:
type: JSON
privacy_policy_link:
type: URL
project_id:
db_table: structure_project
type: ForeignKey
remote_image_uuid:
type: UUID
resource_options:
type: JSON
secret_options:
type: JSON
shared:
type: Boolean
slug:
type: Slug
state:
choices:
- display: Draft
value: 1
- display: Active
value: 2
- display: Paused
value: 3
- display: Archived
value: 4
type: PositiveInteger
support_per_user_consumption_limitation:
type: Boolean
thumbnail:
type: File
type:
type: Char
uuid:
type: UUID
vendor_details:
type: Text
model: offering
type: Table
marketplace_offering_organization_groups:
columns:
id:
type: PositiveInteger
offering_id:
db_table: marketplace_offering
type: ForeignKey
organizationgroup_id:
db_table: structure_organizationgroup
type: ForeignKey
type: ManyToManyTable
marketplace_offeringaccessendpoint:
app_label: marketplace
columns:
id:
type: PositiveInteger
name:
type: Char
offering_id:
db_table: marketplace_offering
type: ForeignKey
url:
type: BackendURL
uuid:
type: UUID
model: offeringaccessendpoint
type: Table
marketplace_offeringcomponent:
app_label: marketplace
columns:
article_code:
type: Char
backend_id:
type: Char
billing_type:
type: Char
content_type_id:
db_table: django_content_type
type: ForeignKey
default_limit:
type: Integer
description:
type: Char
id:
type: PositiveInteger
is_boolean:
type: Boolean
is_prepaid:
type: Boolean
limit_amount:
type: Integer
limit_period:
type: Char
max_available_limit:
type: Integer
max_prepaid_duration:
type: Integer
max_value:
type: Integer
measured_unit:
type: Char
min_prepaid_duration:
type: Integer
min_value:
type: Integer
name:
type: Char
object_id:
type: PositiveInteger
offering_id:
db_table: marketplace_offering
type: ForeignKey
overage_component_id:
db_table: marketplace_offeringcomponent
type: ForeignKey
parent_id:
db_table: marketplace_categorycomponent
type: ForeignKey
type:
type: Char
unit_factor:
type: Integer
uuid:
type: UUID
model: offeringcomponent
type: Table
marketplace_offeringfile:
app_label: marketplace
columns:
created:
type: DateTime
file:
type: File
id:
type: PositiveInteger
modified:
type: DateTime
name:
type: Char
offering_id:
db_table: marketplace_offering
type: ForeignKey
uuid:
type: UUID
model: offeringfile
type: Table
marketplace_offeringpartition:
app_label: marketplace
columns:
cpu_bind:
type: PositiveInteger
created:
type: DateTime
def_cpu_per_gpu:
type: PositiveInteger
def_mem_per_cpu:
type: PositiveBigInteger
def_mem_per_gpu:
type: PositiveBigInteger
def_mem_per_node:
type: PositiveBigInteger
default_time:
type: PositiveInteger
exclusive_topo:
type: Boolean
exclusive_user:
type: Boolean
grace_time:
type: PositiveInteger
id:
type: PositiveInteger
max_cpus_per_node:
type: PositiveInteger
max_cpus_per_socket:
type: PositiveInteger
max_mem_per_cpu:
type: PositiveBigInteger
max_mem_per_node:
type: PositiveBigInteger
max_nodes:
type: PositiveInteger
max_time:
type: PositiveInteger
min_nodes:
type: PositiveInteger
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
partition_name:
type: Char
priority_tier:
type: PositiveSmallInteger
qos:
type: Char
req_resv:
type: Boolean
uuid:
type: UUID
model: offeringpartition
type: Table
marketplace_offeringsoftwarecatalog:
app_label: marketplace
columns:
catalog_id:
db_table: marketplace_softwarecatalog
type: ForeignKey
created:
type: DateTime
enabled_cpu_family:
type: JSON
enabled_cpu_microarchitectures:
type: JSON
id:
type: PositiveInteger
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
partition_id:
db_table: marketplace_offeringpartition
type: ForeignKey
uuid:
type: UUID
model: offeringsoftwarecatalog
type: Table
marketplace_offeringtermsofservice:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
is_active:
type: Boolean
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
requires_reconsent:
type: Boolean
terms_of_service:
type: Text
terms_of_service_link:
type: URL
uuid:
type: UUID
version:
type: Char
model: offeringtermsofservice
type: Table
marketplace_offeringuser:
app_label: marketplace
columns:
backend_metadata:
type: JSON
created:
type: DateTime
id:
type: PositiveInteger
is_restricted:
type: Boolean
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
service_provider_comment:
type: Text
service_provider_comment_url:
type: URL
state:
choices:
- display: Requested
value: 1
- display: Creating
value: 2
- display: Pending account linking
value: 3
- display: Pending additional validation
value: 4
- display: OK
value: 5
- display: Requested deletion
value: 6
- display: Deleting
value: 7
- display: Deleted
value: 8
- display: Error creating
value: 9
- display: Error deleting
value: 10
type: PositiveInteger
user_id:
db_table: core_user
type: ForeignKey
username:
type: Char
uuid:
type: UUID
model: offeringuser
type: Table
marketplace_offeringusergroup:
app_label: marketplace
columns:
backend_metadata:
type: JSON
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
model: offeringusergroup
type: Table
marketplace_offeringusergroup_projects:
columns:
id:
type: PositiveInteger
offeringusergroup_id:
db_table: marketplace_offeringusergroup
type: ForeignKey
project_id:
db_table: structure_project
type: ForeignKey
type: ManyToManyTable
marketplace_offeringuserrole:
app_label: marketplace
columns:
id:
type: PositiveInteger
name:
type: Char
offering_id:
db_table: marketplace_offering
type: ForeignKey
uuid:
type: UUID
model: offeringuserrole
type: Table
marketplace_order:
app_label: marketplace
columns:
attachment:
type: File
attributes:
type: JSON
backend_id:
type: Char
callback_url:
type: URL
completed_at:
type: DateTime
consumer_reviewed_at:
type: DateTime
consumer_reviewed_by_id:
db_table: core_user
type: ForeignKey
cost:
type: Decimal
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
limits:
type: JSON
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
old_plan_id:
db_table: marketplace_plan
type: ForeignKey
output:
type: Text
plan_id:
db_table: marketplace_plan
type: ForeignKey
project_id:
db_table: structure_project
type: ForeignKey
provider_reviewed_at:
type: DateTime
provider_reviewed_by_id:
db_table: core_user
type: ForeignKey
request_comment:
type: Char
resource_id:
db_table: marketplace_resource
type: ForeignKey
slug:
type: Slug
start_date:
type: Date
state:
choices:
- display: pending-consumer
value: 1
- display: pending-provider
value: 7
- display: pending-project
value: 8
- display: pending-start-date
value: 9
- display: executing
value: 2
- display: done
value: 3
- display: erred
value: 4
- display: canceled
value: 5
- display: rejected
value: 6
type: PositiveInteger
termination_comment:
type: Char
type:
choices:
- display: Create
value: 1
- display: Update
value: 2
- display: Terminate
value: 3
type: PositiveSmallInteger
uuid:
type: UUID
model: order
type: Table
marketplace_plan:
app_label: marketplace
columns:
archived:
type: Boolean
article_code:
type: Char
backend_id:
type: Char
content_type_id:
db_table: django_content_type
type: ForeignKey
created:
type: DateTime
description:
type: Char
id:
type: PositiveInteger
max_amount:
type: PositiveSmallInteger
modified:
type: DateTime
name:
type: Char
object_id:
type: PositiveInteger
offering_id:
db_table: marketplace_offering
type: ForeignKey
unit:
type: Char
unit_price:
type: Decimal
uuid:
type: UUID
model: plan
type: Table
marketplace_plan_organization_groups:
columns:
id:
type: PositiveInteger
organizationgroup_id:
db_table: structure_organizationgroup
type: ForeignKey
plan_id:
db_table: marketplace_plan
type: ForeignKey
type: ManyToManyTable
marketplace_plancomponent:
app_label: marketplace
columns:
amount:
type: PositiveInteger
component_id:
db_table: marketplace_offeringcomponent
type: ForeignKey
discount_rate:
type: PositiveInteger
discount_threshold:
type: PositiveInteger
future_price:
type: Decimal
id:
type: PositiveInteger
plan_id:
db_table: marketplace_plan
type: ForeignKey
price:
type: Decimal
model: plancomponent
type: Table
marketplace_projectserviceaccount:
app_label: marketplace
columns:
created:
type: DateTime
description:
type: Text
email:
type: Email
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
modified:
type: DateTime
preferred_identifier:
type: Char
project_id:
db_table: structure_project
type: ForeignKey
state:
choices:
- display: OK
value: 1
- display: Closed
value: 2
- display: Erred
value: 3
type: PositiveInteger
username:
type: Char
uuid:
type: UUID
model: projectserviceaccount
type: Table
marketplace_resource:
app_label: marketplace
columns:
attributes:
type: JSON
backend_id:
type: Char
backend_metadata:
type: JSON
content_type_id:
db_table: django_content_type
type: ForeignKey
cost:
type: Decimal
created:
type: DateTime
current_usages:
type: JSON
description:
type: Char
downscaled:
type: Boolean
effective_id:
type: Char
end_date:
type: Date
end_date_requested_by_id:
db_table: core_user
type: ForeignKey
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
last_sync:
type: DateTime
limits:
type: JSON
modified:
type: DateTime
name:
type: Char
object_id:
type: PositiveInteger
offering_id:
db_table: marketplace_offering
type: ForeignKey
options:
type: JSON
parent_id:
db_table: marketplace_resource
type: ForeignKey
paused:
type: Boolean
plan_id:
db_table: marketplace_plan
type: ForeignKey
project_id:
db_table: structure_project
type: ForeignKey
report:
type: JSON
restrict_member_access:
type: Boolean
slug:
type: Slug
state:
choices:
- display: Creating
value: 1
- display: OK
value: 2
- display: Erred
value: 3
- display: Updating
value: 4
- display: Terminating
value: 5
- display: Terminated
value: 6
type: PositiveInteger
uuid:
type: UUID
model: resource
type: Table
marketplace_resourceaccessendpoint:
app_label: marketplace
columns:
id:
type: PositiveInteger
name:
type: Char
resource_id:
db_table: marketplace_resource
type: ForeignKey
url:
type: BackendURL
uuid:
type: UUID
model: resourceaccessendpoint
type: Table
marketplace_resourceplanperiod:
app_label: marketplace
columns:
created:
type: DateTime
end:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
plan_id:
db_table: marketplace_plan
type: ForeignKey
resource_id:
db_table: marketplace_resource
type: ForeignKey
start:
type: DateTime
uuid:
type: UUID
model: resourceplanperiod
type: Table
marketplace_resourceuser:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
resource_id:
db_table: marketplace_resource
type: ForeignKey
role_id:
db_table: marketplace_offeringuserrole
type: ForeignKey
user_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: resourceuser
type: Table
marketplace_robotaccount:
app_label: marketplace
columns:
backend_id:
type: Char
backend_metadata:
type: JSON
created:
type: DateTime
description:
type: Text
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
keys:
type: JSON
modified:
type: DateTime
resource_id:
db_table: marketplace_resource
type: ForeignKey
responsible_user_id:
db_table: core_user
type: ForeignKey
state:
choices:
- display: Requested
value: 1
- display: Creating
value: 2
- display: OK
value: 3
- display: Requested deletion
value: 4
- display: Deleted
value: 5
- display: Error
value: 6
type: PositiveInteger
type:
type: Char
username:
type: Char
uuid:
type: UUID
model: robotaccount
type: Table
marketplace_robotaccount_users:
columns:
id:
type: PositiveInteger
robotaccount_id:
db_table: marketplace_robotaccount
type: ForeignKey
user_id:
db_table: core_user
type: ForeignKey
type: ManyToManyTable
marketplace_screenshot:
app_label: marketplace
columns:
backend_id:
type: Char
created:
type: DateTime
description:
type: Char
id:
type: PositiveInteger
image:
type: Image
modified:
type: DateTime
name:
type: Char
offering_id:
db_table: marketplace_offering
type: ForeignKey
thumbnail:
type: Image
uuid:
type: UUID
model: screenshot
type: Table
marketplace_section:
app_label: marketplace
columns:
category_id:
db_table: marketplace_category
type: ForeignKey
created:
type: DateTime
is_standalone:
type: Boolean
key:
type: Char
modified:
type: DateTime
title:
type: Char
model: section
type: Table
marketplace_serviceprovider:
app_label: marketplace
columns:
api_secret_code:
type: Char
created:
type: DateTime
customer_id:
db_table: structure_customer
type: OneToOne
description:
type: Char
enable_notifications:
type: Boolean
id:
type: PositiveInteger
image:
type: Image
lead_body:
type: Text
lead_email:
type: Email
lead_subject:
type: Char
modified:
type: DateTime
uuid:
type: UUID
model: serviceprovider
type: Table
marketplace_softwarecatalog:
app_label: marketplace
columns:
created:
type: DateTime
description:
type: Text
id:
type: PositiveInteger
modified:
type: DateTime
name:
type: Char
source_url:
type: URL
uuid:
type: UUID
version:
type: Char
model: softwarecatalog
type: Table
marketplace_softwarepackage:
app_label: marketplace
columns:
catalog_id:
db_table: marketplace_softwarecatalog
type: ForeignKey
created:
type: DateTime
description:
type: Text
homepage:
type: URL
id:
type: PositiveInteger
modified:
type: DateTime
name:
type: Char
uuid:
type: UUID
model: softwarepackage
type: Table
marketplace_softwaretarget:
app_label: marketplace
columns:
cpu_family:
type: Char
cpu_microarchitecture:
type: Char
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
path:
type: Char
uuid:
type: UUID
version_id:
db_table: marketplace_softwareversion
type: ForeignKey
model: softwaretarget
type: Table
marketplace_softwareversion:
app_label: marketplace
columns:
created:
type: DateTime
id:
type: PositiveInteger
metadata:
type: JSON
modified:
type: DateTime
package_id:
db_table: marketplace_softwarepackage
type: ForeignKey
release_date:
type: Date
uuid:
type: UUID
version:
type: Char
model: softwareversion
type: Table
marketplace_userofferingconsent:
app_label: marketplace
columns:
agreement_date:
type: DateTime
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
offering_id:
db_table: marketplace_offering
type: ForeignKey
revocation_date:
type: DateTime
user_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
version:
type: Char
model: userofferingconsent
type: Table
permissions_role:
app_label: permissions
columns:
content_type_id:
db_table: django_content_type
type: ForeignKey
description:
type: Char
id:
type: PositiveInteger
is_active:
type: Boolean
is_system_role:
type: Boolean
name:
type: Char
uuid:
type: UUID
model: role
type: Table
permissions_rolepermission:
app_label: permissions
columns:
id:
type: PositiveInteger
permission:
type: Char
role_id:
db_table: permissions_role
type: ForeignKey
model: rolepermission
type: Table
permissions_userrole:
app_label: permissions
columns:
content_type_id:
db_table: django_content_type
type: ForeignKey
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
expiration_time:
type: DateTime
id:
type: PositiveInteger
is_active:
type: Boolean
modified:
type: DateTime
object_id:
type: PositiveInteger
role_id:
db_table: permissions_role
type: ForeignKey
user_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: userrole
type: Table
structure_accesssubnet:
app_label: structure
columns:
customer_id:
db_table: structure_customer
type: ForeignKey
description:
type: Char
id:
type: PositiveInteger
inet:
type: CidrAddress
uuid:
type: UUID
model: accesssubnet
type: Table
structure_customer:
app_label: structure
columns:
abbreviation:
type: Char
access_subnets:
type: Text
accounting_start_date:
type: DateTime
address:
type: Char
agreement_number:
type: Char
archived:
type: Boolean
backend_id:
type: Char
bank_account:
type: Char
bank_name:
type: Char
blocked:
type: Boolean
contact_details:
type: Text
country:
type: Char
created:
type: DateTime
default_tax_percent:
type: Decimal
description:
type: Char
display_billing_info_in_projects:
type: Boolean
domain:
type: Char
email:
type: Email
homepage:
type: URL
id:
type: PositiveInteger
image:
type: Image
latitude:
type: Float
longitude:
type: Float
max_service_accounts:
type: PositiveSmallInteger
modified:
type: DateTime
name:
type: Char
native_name:
type: Char
notification_emails:
type: Char
phone_number:
type: Char
postal:
type: Char
registration_code:
type: Char
slug:
type: Slug
sponsor_number:
type: PositiveInteger
uuid:
type: UUID
vat_address:
type: Char
vat_code:
type: Char
vat_name:
type: Char
model: customer
type: Table
structure_customer_organization_groups:
columns:
customer_id:
db_table: structure_customer
type: ForeignKey
id:
type: PositiveInteger
organizationgroup_id:
db_table: structure_organizationgroup
type: ForeignKey
type: ManyToManyTable
structure_customerpermissionreview:
app_label: structure
columns:
closed:
type: DateTime
created:
type: DateTime
customer_id:
db_table: structure_customer
type: ForeignKey
id:
type: PositiveInteger
is_pending:
type: Boolean
reviewer_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: customerpermissionreview
type: Table
structure_externallink:
app_label: structure
columns:
created:
type: DateTime
description:
type: Char
id:
type: PositiveInteger
image:
type: Image
link:
type: URL
modified:
type: DateTime
name:
type: Char
uuid:
type: UUID
model: externallink
type: Table
structure_organizationgroup:
app_label: structure
columns:
id:
type: PositiveInteger
name:
type: Char
parent_id:
db_table: structure_organizationgroup
type: ForeignKey
uuid:
type: UUID
model: organizationgroup
type: Table
structure_project:
app_label: structure
columns:
backend_id:
type: Char
created:
type: DateTime
customer_id:
db_table: structure_customer
type: ForeignKey
description:
type: Char
end_date:
type: Date
end_date_requested_by_id:
db_table: core_user
type: ForeignKey
id:
type: PositiveInteger
image:
type: Image
is_industry:
type: Boolean
is_removed:
type: Boolean
kind:
type: Char
max_service_accounts:
type: PositiveSmallInteger
modified:
type: DateTime
name:
type: Char
oecd_fos_2007_code:
type: Char
slug:
type: Slug
staff_notes:
type: Char
start_date:
type: Date
termination_metadata:
type: JSON
type_id:
db_table: structure_projecttype
type: ForeignKey
uuid:
type: UUID
model: project
type: Table
structure_projectpermissionreview:
app_label: structure
columns:
closed:
type: DateTime
created:
type: DateTime
id:
type: PositiveInteger
is_pending:
type: Boolean
project_id:
db_table: structure_project
type: ForeignKey
reviewer_id:
db_table: core_user
type: ForeignKey
uuid:
type: UUID
model: projectpermissionreview
type: Table
structure_projecttype:
app_label: structure
columns:
description:
type: Char
id:
type: PositiveInteger
name:
type: Char
uuid:
type: UUID
model: projecttype
type: Table
structure_servicesettings:
app_label: structure
columns:
backend_url:
type: BackendURL
certificate:
type: File
content_type_id:
db_table: django_content_type
type: ForeignKey
customer_id:
db_table: structure_customer
type: ForeignKey
domain:
type: Char
error_message:
type: Text
error_traceback:
type: Text
id:
type: PositiveInteger
is_active:
type: Boolean
name:
type: Char
object_id:
type: PositiveInteger
options:
type: JSON
password:
type: Char
shared:
type: Boolean
state:
choices:
- display: CREATION_SCHEDULED
value: 5
- display: CREATING
value: 6
- display: UPDATE_SCHEDULED
value: 1
- display: UPDATING
value: 2
- display: DELETION_SCHEDULED
value: 7
- display: DELETING
value: 8
- display: OK
value: 3
- display: ERRED
value: 4
type: PositiveInteger
terms_of_services:
type: URL
token:
type: Char
type:
type: Char
username:
type: Char
uuid:
type: UUID
model: servicesettings
type: Table
structure_useragreement:
app_label: structure
columns:
agreement_type:
type: Char
content:
type: Text
created:
type: DateTime
id:
type: PositiveInteger
modified:
type: DateTime
uuid:
type: UUID
model: useragreement
type: Table
users_groupinvitation:
app_label: users
columns:
auto_create_project:
type: Boolean
content_type_id:
db_table: django_content_type
type: ForeignKey
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
customer_id:
db_table: structure_customer
type: ForeignKey
id:
type: PositiveInteger
is_active:
type: Boolean
is_public:
type: Boolean
modified:
type: DateTime
object_id:
type: PositiveInteger
project_name_template:
type: Char
project_role_id:
db_table: permissions_role
type: ForeignKey
role_id:
db_table: permissions_role
type: ForeignKey
user_affiliations:
type: JSON
user_email_patterns:
type: JSON
uuid:
type: UUID
model: groupinvitation
type: Table
users_invitation:
app_label: users
columns:
affiliations:
type: JSON
approved_by_id:
db_table: core_user
type: ForeignKey
civil_number:
type: Char
content_type_id:
db_table: django_content_type
type: ForeignKey
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
customer_id:
db_table: structure_customer
type: ForeignKey
email:
type: Email
error_message:
type: Text
error_traceback:
type: Text
execution_state:
type: FSM
extra_invitation_text:
type: Text
full_name:
type: Char
id:
type: PositiveInteger
job_title:
type: Char
modified:
type: DateTime
native_name:
type: Char
object_id:
type: PositiveInteger
organization:
type: Char
phone_number:
type: Char
role_id:
db_table: permissions_role
type: ForeignKey
state:
type: Char
uuid:
type: UUID
model: invitation
type: Table
users_permissionrequest:
app_label: users
columns:
created:
type: DateTime
created_by_id:
db_table: core_user
type: ForeignKey
id:
type: PositiveInteger
invitation_id:
db_table: users_groupinvitation
type: ForeignKey
modified:
type: DateTime
review_comment:
type: Text
reviewed_at:
type: DateTime
reviewed_by_id:
db_table: core_user
type: ForeignKey
state:
choices:
- display: draft
value: 1
- display: pending
value: 2
- display: approved
value: 3
- display: rejected
value: 4
- display: canceled
value: 5
type: PositiveInteger
uuid:
type: UUID
model: permissionrequest
type: Table
```