[
  {
    "path": ".devcontainer/Dockerfile",
    "content": "# use latest python 3 alpine image.\nFROM python:3-alpine\n\n# install system dependencies.\nRUN apk update && apk add --no-cache \\\n  gcc libc-dev g++ graphviz git bash go imagemagick inkscape ttf-opensans curl fontconfig xdg-utils \\\n  nodejs npm\n\n# install go package.\nRUN go install github.com/mingrammer/round@latest\n\n# install fonts\nRUN curl -O https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \\\n&& mkdir -p /usr/share/fonts/NotoSansCJKjp \\\n&& unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \\\n&& rm NotoSansCJKjp-hinted.zip \\\n&& fc-cache -fv\n\n# add go bin to path.\nENV PATH \"$PATH:/root/go/bin\"\n\n# project directory.\nWORKDIR /usr/src/diagrams\n\n# Copy the rest of your app's source code from your host to your image filesystem.\nCOPY . .\n\n# install python requirements.\nRUN pip install black graphviz jinja2\n"
  },
  {
    "path": ".devcontainer/devcontainer.json",
    "content": "// For format details, see https://aka.ms/devcontainer.json. For config options, see the\n// README at: https://github.com/devcontainers/templates/tree/main/src/docker-outside-of-docker\n{\n\t\"name\": \"Diagrams\",\n\t// Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile\n\t// \"image\": \"mcr.microsoft.com/devcontainers/base:bullseye\",\n\t\"build\":{\n\t\t\"dockerfile\": \"../docker/dev/Dockerfile\"\n\t},\n\n\t// Use this environment variable if you need to bind mount your local source code into a new container.\n\t// \"remoteEnv\": {\n\t// \t\"LOCAL_WORKSPACE_FOLDER\": \"${localWorkspaceFolder}\"\n\t// }\n\n\t// Use 'forwardPorts' to make a list of ports inside the container available locally.\n\t// \"forwardPorts\": [],\n\n\t// Use 'postCreateCommand' to run commands after the container is created.\n\t// \"postCreateCommand\": \"docker --version\",\n\n\t// Configure tool-specific properties.\n\t\"customizations\": {\n\t\t\"vscode\": {\n\t\t\t\"extensions\": [\n\t\t\t\t\"ms-python.python\",\n\t\t\t\t\"ms-python.debugpy\",\n\t\t\t\t\"mhutchie.git-graph\",\n\t\t\t\t\"mutantdino.resourcemonitor\",\n\t\t\t\t\"tehpeng.diagramspreviewer\"\n\t\t\t]\n\t\t}\n\t}\n  \"workspaceMount\": \"source=${localWorkspaceFolder},target=/usr/src/diagrams,type=bind\",\n\t\"workspaceFolder\": \"/usr/src/diagrams\"\n\t// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.\n\t// \"remoteUser\": \"root\"\n}\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n- package-ecosystem: pip\n  directory: \"/\"\n  schedule:\n    interval: daily\n    time: \"08:00\"\n  open-pull-requests-limit: 10\n- package-ecosystem: npm\n  directory: \"/website\"\n  schedule:\n    interval: daily\n    time: \"08:00\"\n  open-pull-requests-limit: 10\n- package-ecosystem: docker\n  directory: \"/docker/dev\"\n  schedule:\n    interval: daily\n    time: \"08:00\"\n  open-pull-requests-limit: 10\n"
  },
  {
    "path": ".github/workflows/codeql-analysis.yml",
    "content": "name: \"CodeQL\"\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    # The branches below must be a subset of the branches above\n    branches: [master]\n  schedule:\n    - cron: '0 16 * * 2'\n\njobs:\n  analyse:\n    name: Analyse\n    runs-on: ubuntu-latest\n\n    steps:\n    - name: Checkout repository\n      uses: actions/checkout@v4\n      with:\n        # We must fetch at least the immediate parents so that if this is\n        # a pull request then we can check out the head.\n        fetch-depth: 2\n\n    # If this run was triggered by a pull request event, then checkout\n    # the head of the pull request instead of the merge commit.\n    - run: git checkout HEAD^2\n      if: ${{ github.event_name == 'pull_request' }}\n\n    # Initializes the CodeQL tools for scanning.\n    - name: Initialize CodeQL\n      uses: github/codeql-action/init@v3\n      # Override language selection by uncommenting this and choosing your languages\n      with:\n        languages: python\n\n    - name: Perform CodeQL Analysis\n      uses: github/codeql-action/analyze@v3\n"
  },
  {
    "path": ".github/workflows/pre-commit.yml",
    "content": "name: pre-commit\n\non:\n  pull_request:\n  push:\n    branches: [main]\n\njobs:\n  pre-commit:\n    runs-on: ubuntu-latest\n    steps:\n    - uses: actions/checkout@v3\n    - uses: actions/setup-python@v3\n    - uses: pre-commit/action@v3.0.1\n"
  },
  {
    "path": ".github/workflows/test.yml",
    "content": "name: Run tests\n\non:\n  push:\n    branches:\n      - master\n    paths:\n      - \".github/workflows/test.yml\"\n      - \"pyproject.toml\"\n      - \"poetry.lock\"\n      - \"**.py\"\n  pull_request:\n    branches:\n      - master\n    paths:\n      - \".github/workflows/test.yml\"\n      - \"pyproject.toml\"\n      - \"poetry.lock\"\n      - \"**.py\"\n\njobs:\n  test:\n    strategy:\n      matrix:\n        python: [\"3.9\", \"3.10\", \"3.11\", \"3.12\", \"3.13\"]\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: ${{ matrix.python }}\n      - name: Setup Graphviz\n        uses: ts-graphviz/setup-graphviz@v2\n      - name: Install poetry\n        run: curl -sSL https://install.python-poetry.org | python3 -\n      - name: Run all tests\n        run: |\n          poetry install\n          poetry run python -m unittest -v tests/*.py\n"
  },
  {
    "path": ".gitignore",
    "content": "# ide & editor\n.idea/\n.vscode/\n\n# compiled & binary\n*.egg-info/\n__pycache__/\n*.pyc\n*.egg-info\n\n# graphviz\n*.gv*\n\n# dist\ndist\nwebsite/build\n\n# node modules\nnode_modules\n\n# testing\nmain.py\n\n# trash\n.DS_Store\n\n# Website uses yarn; ignore npm package-lock.json\nwebsite/package-lock.json\n\n# Ignore .swp files\n.swp\n*.whl\ndist/\n"
  },
  {
    "path": ".isort.cfg",
    "content": "[settings]\nline_length = 120\nmulti_line_output = 3\ninclude_trailing_comma = True\nknown_third_party = graphviz,jinja2\n"
  },
  {
    "path": ".pre-commit-config.yaml",
    "content": "repos:\n-   repo: https://github.com/pre-commit/pre-commit-hooks\n    rev: v3.2.0\n    hooks:\n    -   id: check-yaml\n    -   id: end-of-file-fixer\n    -   id: trailing-whitespace\n\n-   repo: https://github.com/asottile/seed-isort-config\n    rev: v2.2.0\n    hooks:\n    -   id: seed-isort-config\n\n-   repo: https://github.com/pre-commit/mirrors-isort\n    rev: v5.10.1\n    hooks:\n    -   id: isort\n\n-   repo: https://github.com/hhatto/autopep8\n    rev: v2.3.1\n    hooks:\n    -   id: autopep8\n        args: [--in-place, --aggressive, --aggressive, --max-line-length=120]\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelogs\n\n## 0.17.0\n\n### Added\n\n- Support GCP Endpoints: [#259](https://github.com/mingrammer/diagrams/pull/259)\n- Support DroneCI and Atlantis (Terraform): [#255](https://github.com/mingrammer/diagrams/pull/255)\n- Support Okta: [#254](https://github.com/mingrammer/diagrams/pull/254)\n- Support OutScale provider: [#251](https://github.com/mingrammer/diagrams/pull/251)\n- Support Prometheus Operator: [#253](https://github.com/mingrammer/diagrams/pull/253)\n- Support Snowflake: [#245](https://github.com/mingrammer/diagrams/pull/245)\n- Support for CJK fonts + Replace ms-fonts with opensans: [#242](https://github.com/mingrammer/diagrams/pull/242)\n- Support Pushover: [#241](https://github.com/mingrammer/diagrams/pull/241)\n\n### Fixed\n\n- Update bm, vm cases for OCI\n- Set a dummy filename to prevent raise error when both name and filename are not provided: [#240](https://github.com/mingrammer/diagrams/pull/240)\n\n## 0.16.0\n\n### Breaking Changes\n\nThe following import changes:\n\n#### Elastic\n\n| Old import path                                                    | New import path                                               |\n| -------------------------------------------------------------------| --------------------------------------------------------------|\n| `from diagrams.onprem.logging import Logstash`                     | `from diagrams.elastic.elasticsearch import Logstash`         |\n| `from diagrams.onprem.monitoring import Kibana`                    | `from diagrams.elastic.elasticsearch import Kibana`           |\n| `from diagrams.onprem.search import Elasticsearch`                 | `from diagrams.elastic.elasticsearch import Elasticsearch`    |\n\n> About `from diagrams.onprem.search import Elasticsearch` the previous icon was the company icon, not the elasticsearch product.\n>\n> For the company icon use: `from diagrams.elastic.saas import Elastic`\n\n#### OCI\n\n| Old import path                                                    | New import path                                               |\n| -------------------------------------------------------------------| --------------------------------------------------------------|\n| `from diagrams.oci.compute import AutoScale`                       | `from diagrams.oci.compute import Autoscale`                  |\n| `from diagrams.oci.compute import AutoScaleWhite`                  | `from diagrams.oci.compute import AutoscaleWhite`             |\n| `from diagrams.oci.compute import Bm`                              | `from diagrams.oci.compute import BM`                         |\n| `from diagrams.oci.compute import BmWhite`                         | `from diagrams.oci.compute import BMWhite`                    |\n| `from diagrams.oci.compute import Vm`                              | `from diagrams.oci.compute import VM`                         |\n| `from diagrams.oci.compute import VmWhite`                         | `from diagrams.oci.compute import VMWhite`                    |\n| `from diagrams.oci.connectivity import Customerdatacenter`         | `from diagrams.oci.connectivity import CustomerDatacenter`    |\n| `from diagrams.oci.connectivity import CustomerdatacenterWhite`    | `from diagrams.oci.connectivity import CustomerDatacntrWhite` |\n| `from diagrams.oci.connectivity import Customerpremisesequip`      | `from diagrams.oci.connectivity import CustomerPremise`       |\n| `from diagrams.oci.connectivity import CustomerpremisesequipWhite` | `from diagrams.oci.connectivity import CustomerPremiseWhite`  |\n| `from diagrams.oci.connectivity import Fastconnect`                | `from diagrams.oci.connectivity import FastConnect`           |\n| `from diagrams.oci.connectivity import FastconnectWhite`           | `from diagrams.oci.connectivity import FastConnectWhite`      |\n| `from diagrams.oci.connectivity import Vpn`                        | `from diagrams.oci.connectivity import VPN`                   |\n| `from diagrams.oci.connectivity import VpnWhite`                   | `from diagrams.oci.connectivity import VPNWhite`              |\n| `from diagrams.oci.database import AutonomousDatabase`             | `from diagrams.oci.database import Autonomous`                |\n| `from diagrams.oci.database import AutonomousDatabaseWhite`        | `from diagrams.oci.database import AutonomousWhite`           |\n| `from diagrams.oci.database import Databaseservice`                | `from diagrams.oci.database import DatabaseService`           |\n| `from diagrams.oci.database import DatabaseserviceWhite`           | `from diagrams.oci.database import DatabaseServiceWhite`      |\n| `from diagrams.oci.devops import Apigateway`                       | `from diagrams.oci.devops import APIGateway`                  |\n| `from diagrams.oci.devops import ApigatewayWhite`                  | `from diagrams.oci.devops import APIGatewayWhite`             |\n| `from diagrams.oci.devops import Apiservice`                       | `from diagrams.oci.devops import APIService`                  |\n| `from diagrams.oci.devops import ApiserviceWhite`                  | `from diagrams.oci.devops import APIServiceWhite`             |\n| `from diagrams.oci.devops import Resourcemgmt`                     | `from diagrams.oci.devops import ResourceMgmt`                |\n| `from diagrams.oci.devops import ResourcemgmtWhite`                | `from diagrams.oci.devops import ResourceMgmtWhite`           |\n| `from diagrams.oci.edge import Cdn`                                | `from diagrams.oci.connectivity import CDN`                   |\n| `from diagrams.oci.edge import CdnWhite`                           | `from diagrams.oci.connectivity import CDNWhite`              |\n| `from diagrams.oci.edge import Dns`                                | `from diagrams.oci.connectivity import DNS`                   |\n| `from diagrams.oci.edge import DnsWhite`                           | `from diagrams.oci.connectivity import DNSWhite`              |\n| `from diagrams.oci.edge import Emaildelivery`                      | `from diagrams.oci.monitoring import Email`                   |\n| `from diagrams.oci.edge import EmaildeliveryWhite`                 | `from diagrams.oci.monitoring import EmailWhite`              |\n| `from diagrams.oci.edge import Waf`                                | `from diagrams.oci.security import WAF`                       |\n| `from diagrams.oci.edge import WafWhite`                           | `from diagrams.oci.security import WAFWhite`                  |\n| `from diagrams.oci.monitoring import Event`                        | `from diagrams.oci.monitoring import Events`                  |\n| `from diagrams.oci.monitoring import EventWhite`                   | `from diagrams.oci.monitoring import EventsWhite`             |\n| `from diagrams.oci.monitoring import Healthcheck`                  | `from diagrams.oci.monitoring import HealthCheck`             |\n| `from diagrams.oci.monitoring import HealthcheckWhite`             | `from diagrams.oci.monitoring import HealthCheckWhite`        |\n| `from diagrams.oci.monitoring import Logging`                      | `from diagrams.oci.governance import Logging`                 |\n| `from diagrams.oci.monitoring import LoggingWhite`                 | `from diagrams.oci.governance import LoggingWhite`            |\n| `from diagrams.oci.monitoring import Queuing`                      | `from diagrams.oci.monitoring import Queue`                   |\n| `from diagrams.oci.monitoring import QueuingWhite`                 | `from diagrams.oci.monitoring import QueueWhite`              |\n| `from diagrams.oci.network import Internetgateway`                 | `from diagrams.oci.network import InternetGateway`            |\n| `from diagrams.oci.network import InternetgatewayWhite`            | `from diagrams.oci.network import InternetGatewayWhite`       |\n| `from diagrams.oci.network import Loadbalance`                     | `from diagrams.oci.network import LoadBalancer`               |\n| `from diagrams.oci.network import LoadbalanceWhite`                | `from diagrams.oci.network import LoadBalancerWhite`          |\n| `from diagrams.oci.network import NATgateway`                      | `from diagrams.oci.connectivity import NATGateway`            |\n| `from diagrams.oci.network import NATgatewayWhite`                 | `from diagrams.oci.connectivity import NATGatewayWhite`       |\n| `from diagrams.oci.network import Routetable`                      | `from diagrams.oci.network import RouteTable`                 |\n| `from diagrams.oci.network import RoutetableWhite`                 | `from diagrams.oci.network import RouteTableWhite`            |\n| `from diagrams.oci.network import Securitylists`                   | `from diagrams.oci.network import SecurityLists`              |\n| `from diagrams.oci.network import SecuritylistsWhite`              | `from diagrams.oci.network import SecurityListsWhite`         |\n| `from diagrams.oci.network import Vcloudnetwork`                   | `from diagrams.oci.network import Vcn`                        |\n| `from diagrams.oci.network import VcloudnetworkWhite`              | `from diagrams.oci.network import VcnWhite`                   |\n| `from diagrams.oci.security import Audit`                          | `from diagrams.oci.governance import Audit`                   |\n| `from diagrams.oci.security import AuditWhite`                     | `from diagrams.oci.governance import AuditWhite`              |\n| `from diagrams.oci.security import Compartments`                   | `from diagrams.oci.governance import Compartments`            |\n| `from diagrams.oci.security import CompartmentsWhite`              | `from diagrams.oci.governance import CompartmentsWhite`       |\n| `from diagrams.oci.security import Ddos`                           | `from diagrams.oci.security import DDOS`                      |\n| `from diagrams.oci.security import DdosWhite`                      | `from diagrams.oci.security import DDOSWhite`                 |\n| `from diagrams.oci.security import Groups`                         | `from diagrams.oci.governance import Groups`                  |\n| `from diagrams.oci.security import GroupsWhite`                    | `from diagrams.oci.governance import GroupsWhite`             |\n| `from diagrams.oci.security import IdAccess`                       | `from diagrams.oci.security import IDAccess`                  |\n| `from diagrams.oci.security import IdAccessWhite`                  | `from diagrams.oci.security import IDAccessWhite`             |\n| `from diagrams.oci.security import Keymgmt`                        | `from diagrams.oci.security import KeyManagement`             |\n| `from diagrams.oci.security import KeymgmtWhite`                   | `from diagrams.oci.security import KeyManagementWhite`        |\n| `from diagrams.oci.security import Ocid`                           | `from diagrams.oci.governance import OCID`                    |\n| `from diagrams.oci.security import OcidWhite`                      | `from diagrams.oci.governance import OCIDWhite`               |\n| `from diagrams.oci.security import Policies`                       | `from diagrams.oci.governance import Policies`                |\n| `from diagrams.oci.security import PoliciesWhite`                  | `from diagrams.oci.governance import PoliciesWhite`           |\n| `from diagrams.oci.security import Tagging`                        | `from diagrams.oci.governance import Tagging`                 |\n| `from diagrams.oci.security import TaggingWhite`                   | `from diagrams.oci.governance import TaggingWhite`            |\n| `from diagrams.oci.storage import Backuprestore`                   | `from diagrams.oci.storage import BackupRestore`              |\n| `from diagrams.oci.storage import BackuprestoreWhite`              | `from diagrams.oci.storage import BackupRestoreWhite`         |\n| `from diagrams.oci.storage import Blockstorage`                    | `from diagrams.oci.storage import BlockStorage`               |\n| `from diagrams.oci.storage import BlockstorageWhite`               | `from diagrams.oci.storage import BlockStorageWhite`          |\n| `from diagrams.oci.storage import Datatransfer`                    | `from diagrams.oci.storage import DataTransfer`               |\n| `from diagrams.oci.storage import DatatransferWhite`               | `from diagrams.oci.storage import DataTransferWhite`          |\n| `from diagrams.oci.storage import Filestorage`                     | `from diagrams.oci.storage import FileStorage`                |\n| `from diagrams.oci.storage import FilestorageWhite`                | `from diagrams.oci.storage import FileStorageWhite`           |\n| `from diagrams.oci.storage import Objectstorage`                   | `from diagrams.oci.storage import ObjectStorage`              |\n| `from diagrams.oci.storage import ObjectstorageWhite`              | `from diagrams.oci.storage import ObjectStorageWhite`         |\n| `from diagrams.oci.storage import Storagegateway`                  | `from diagrams.oci.storage import StorageGateway`             |\n| `from diagrams.oci.storage import StoragegatewayWhite`             | `from diagrams.oci.storage import StorageGatewayWhite`        |\n\n### Added\n\n- Docker local development setup: [#210](https://github.com/mingrammer/diagrams/pull/210)\n- Support OpenStack [#211](https://github.com/mingrammer/diagrams/pull/211)\n- Support SQL, Druid and Databricks\n- Support Cloudinary: [#218](https://github.com/mingrammer/diagrams/pull/218)\n\n### Fixed\n\n- Clean GCP resources: [#228](https://github.com/mingrammer/diagrams/pull/228)\n- Support DataDog, PaperTrail, Syslog, Rsyslog and Graylog: [#222](https://github.com/mingrammer/diagrams/pull/222)\n- Update all OCI icon set (bark and white): [#205](https://github.com/mingrammer/diagrams/pull/205)\n\n\n## 0.15.0\n\n### Added\n\n- Support curvestyle option (ortho or curved)\n- Support Auth0, Cloudflare and Recombee: [#209](https://github.com/mingrammer/diagrams/pull/209)\n\n### Fixed\n\n- Fix typo for PersistentVolume: [#207](https://github.com/mingrammer/diagrams/pull/207)\n- Fix misaligned label text position\n\n\n## 0.14.0\n\n### Added\n\n- Support sagemaker for AWS provider: [#204](https://github.com/mingrammer/diagrams/pull/204)\n- Support ConcourseCI: [#198](https://github.com/mingrammer/diagrams/pull/198)\n- Support Tekton CLI: [#199](https://github.com/mingrammer/diagrams/pull/199)\n- Support more analytics tools for Onprem provider: [#195](https://github.com/mingrammer/diagrams/pull/195)\n- Support more resources for AWS provider: [#192](https://github.com/mingrammer/diagrams/pull/192)\n- Support kubernetes ecosystem: [#188](https://github.com/mingrammer/diagrams/pull/188)\n- Support Beats for ElasticStack provider: [#153](https://github.com/mingrammer/diagrams/pull/153)\n- Support more icons for Generic provider: [#186](https://github.com/mingrammer/diagrams/pull/186)\n- Support Opsgenie: [#187](https://github.com/mingrammer/diagrams/pull/187)\n- Support Tekton: [#150](https://github.com/mingrammer/diagrams/pull/150)\n- Support Generic provider: [#171](https://github.com/mingrammer/diagrams/pull/171)\n\n\n## 0.13.1\n\n### Fixed\n\n- Add missing firebase base class: [3f400a7](https://github.com/mingrammer/diagrams/commit/3f400a7bc3c91ae9db1f2e69c290bc004c6fa4c6)\n\n\n## 0.13.0\n\n### Added\n\n- Support more DynamoDB and IAM nodes for AWS: [#180](https://github.com/mingrammer/diagrams/pull/180)\n- New provider elastic: [#174](https://github.com/mingrammer/diagrams/pull/174)\n- Support Rust: [#179](https://github.com/mingrammer/diagrams/pull/179)\n- Support Flux and Flagger: [#147](https://github.com/mingrammer/diagrams/pull/147)\n- New provider saas: [#173](https://github.com/mingrammer/diagrams/pull/173)\n- New provider firebase: [#167](https://github.com/mingrammer/diagrams/pull/167)\n- Support ZuulCI: [#145](https://github.com/mingrammer/diagrams/pull/145)\n\n\n## 0.12.0\n\n### Added\n\n- Support GitlabCI: [#166](https://github.com/mingrammer/diagrams/pull/166)\n- Support Sentry: [#165](https://github.com/mingrammer/diagrams/pull/165)\n- Support Couchbase: [#164](https://github.com/mingrammer/diagrams/pull/164)\n- Support new IoT icons, and new Game, General and Robotics categories for AWS: [#161](https://github.com/mingrammer/diagrams/pull/161)\n- Support general icon set for Azure: [#155](https://github.com/mingrammer/diagrams/pull/155)\n- Support Fluent Bit: [#154](https://github.com/mingrammer/diagrams/pull/154)\n- Support integration services for Azure: [#152](https://github.com/mingrammer/diagrams/pull/152)\n- Support custom attribute options for Nodes: [#151](https://github.com/mingrammer/diagrams/pull/151)\n\n\n## 0.11.0\n\n### Added\n\n- Support programming provider (programming languages and frameworks): [#112](https://github.com/mingrammer/diagrams/pull/112)\n- Support NACL, Subnets, Route Table and VPC peering for AWS provider: [#135](https://github.com/mingrammer/diagrams/pull/135)\n- Support Loki: [#139](https://github.com/mingrammer/diagrams/pull/139)\n- Support Tableau and Metabase: [#142](https://github.com/mingrammer/diagrams/pull/142)\n- Support AWS Elemental Services: [#149](https://github.com/mingrammer/diagrams/pull/149)\n\n### Fixed\n\n- Rename Cloudfront to CloudFront: [#129](https://github.com/mingrammer/diagrams/pull/129)\n\n\n## 0.10.0\n\n### Added\n\n- Support red-colored OCI nodes: [#121](https://github.com/mingrammer/diagrams/pull/121)\n- Support custom graph attributes for the Cluster: [6741ed9](https://github.com/mingrammer/diagrams/commit/6741ed9e2bcca297a1044ca5c8f2cf9eb3f8b5b3)\n\n\n## v0.9.0\n\n### Added\n\n- Support Thanos: [#99](https://github.com/mingrammer/diagrams/pull/99)\n- Support AWS VPC Endpoint: [#101](https://github.com/mingrammer/diagrams/pull/101)\n- Support AWS VPC Router: [#102](https://github.com/mingrammer/diagrams/pull/102)\n- Support Teamcity: [#103](https://github.com/mingrammer/diagrams/pull/103)\n- Support Pomerium: [#104](https://github.com/mingrammer/diagrams/pull/104)\n- Support Ansible and AWX: [#110](https://github.com/mingrammer/diagrams/pull/110)\n\n### Fixed\n\n- Replace MD5 Hash with UUID: [#94](https://github.com/mingrammer/diagrams/pull/94)\n- Verify Edge attributes exist before setting: [#96](https://github.com/mingrammer/diagrams/pull/96)\n\n\n## v0.8.2\n\n### Added\n\n- Support Diadag: [#88](https://github.com/mingrammer/diagrams/pull/88)\n- Support Norika and Embulk: [#87](https://github.com/mingrammer/diagrams/pull/87)\n\n\n## v0.8.1\n\n### Added\n\n- Support Celery: [#68](https://github.com/mingrammer/diagrams/pull/68)\n- Support Terraform: [#79](https://github.com/mingrammer/diagrams/pull/79)\n- Support Clickhouse: [#85](https://github.com/mingrammer/diagrams/pull/85)\n\n\n## v0.8.0\n\n### Added\n\n- Support Apache Beam: [#66](https://github.com/mingrammer/diagrams/pull/66)\n- Support PFSense and VyOS: [#67](https://github.com/mingrammer/diagrams/pull/67)\n- Support Polyaxon: [#74](https://github.com/mingrammer/diagrams/pull/74)\n- Support Spinnaker: [#77](https://github.com/mingrammer/diagrams/pull/77)\n- Support Git, GitLab and GitHub of onprem.vcs: [#80](https://github.com/mingrammer/diagrams/pull/80)\n- Support Dgraph, JanusGraph and Scylla of onprem.database: [#84](https://github.com/mingrammer/diagrams/pull/84)\n\n\n## v0.7.4\n\n### Added\n\n- Trivy of onprem.security: [#61](https://github.com/mingrammer/diagrams/pull/61)\n- Cloud IAP (Identity-Aware Proxy) for GCP provider: [#56](https://github.com/mingrammer/diagrams/pull/56), [#43](https://github.com/mingrammer/diagrams/pull/43)\n\n\n## v0.7.3\n\n### Fixed\n\n- Use dynamic keyword attributes for edge init to fix missing attribute\n\n\n## v0.7.2\n\n### Fixed\n\n- Prevent the edge attrs from overwriting by empty string\n- Only use the label for edge\n\n\n## v0.7.0\n\n### Added\n\n- Customer engagement services for AWS: [#57](https://github.com/mingrammer/diagrams/pull/57)\n- Edge attributes support: [#48](https://github.com/mingrammer/diagrams/pull/48)\n\n\n## v0.6.5\n\n### Added\n\n- More on-prem/aws icons: [#55](https://github.com/mingrammer/diagrams/pull/55)\n- Aliases for etcd and haproxy\n\n\n## v0.6.4\n\n### Added\n\n- AWS management resources\n\n### Fixed\n\n- Update OCI icon set: [#46](https://github.com/mingrammer/diagrams/pull/46)\n\n\n## v0.6.3\n\n### Added\n\n- Support inline rendering for jupyter notebook\n\n\n## v0.6.2\n\n### Fixed\n\n- Support multi-line labels\n\n\n## v0.6.1\n\n### Added\n\n- Aliases for activemq (ActiveMQ) / rabbitmq (RabbitMQ)\n\n\n## v0.6.0\n\n### Added\n\n- Support custom nodes: [#25](https://github.com/mingrammer/diagrams/pull/25)\n- Allow an output filename to be passed to Diagram explicitly: [#28](https://github.com/mingrammer/diagrams/pull/28)\n- Support on-premise nodes: [#35](https://github.com/mingrammer/diagrams/pull/35)\n\n\n## v0.5.0\n\n### Added\n\n- Oracle Cloud provider support: [#20](https://github.com/mingrammer/diagrams/pull/20)\n\n\n## v0.4.0\n\n### Added\n\n- Alibaba Cloud provider support: [#19](https://github.com/mingrammer/diagrams/pull/19)\n\n\n## v0.3.0\n\n### Added\n\n- Allow custom dot attributes: [#11](https://github.com/mingrammer/diagrams/pull/11)\n\n### Fixed\n\n- Support Python 3.6: [#13](https://github.com/mingrammer/diagrams/pull/13)\n\n\n## v0.2.3\n\n### Fixed\n\n- Fix misaligned node labels by removing backward-incompatible 'imagepos' attribute: [#7](https://github.com/mingrammer/diagrams/pull/7)\n\n\n## v0.2.1\n\n### Added\n\n- Add more AWS analytics services: [870b387](https://github.com/mingrammer/diagrams/commit/870b387ded41cb6591b8bdfd3994e5719d8b9969)\n\n\n## v0.2.0\n\n### Added\n\n- Support kubernetes diagrams: [3eda1cb](https://github.com/mingrammer/diagrams/commit/3eda1cb6bca8be8a55773d90b93483a8fab3e0f1)\n\n\n## v0.23.5\n\n### Breaking Changes\n\nThe following import changes:\n\n#### OCI\n\n| Old import path                                                    | New import path                                               |\n| -------------------------------------------------------------------| --------------------------------------------------------------|\n| `from diagrams.oci.connectivity import CustomerPremiseWhite`       | `from diagrams.oci.connectivity import CustomerPremisesWhite` |\n| `from diagrams.oci.connectivity import CustomerPremises`           | `from diagrams.oci.connectivity import CustomerPremises`      |\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contribution Guide\n\nYou shouldn't edit the node class files (all files under `diagrams/` directory) by\nyourself.\n\n## Set up your environment\n\n- See [DEVELOPMENT][DEVELOPMENT.md]\n\n## Resources\n\n### Update nodes\n\nAll node classes are auto-generated from image resource files. For example, the\n`diagram.aws.compute.EC2` class is auto-generated based on the\n`resources/aws/compute/ec2.png` image resource file.\n\nSo, if you want to add new node resources or update existing node resources, you\ncan just add or update the image files in `resources/<provider>/<type>/<image>`.\n\nImages should be resized to fit a maximum of 256 pixels wide or high.\n\n```shell\n# You can do that easily with ImageMagick\nconvert -resize 256 my_big_image.jpg my_image.jpg\n\n# Or FFmpeg\nffmpeg -i my_big_image.jpg -vf scale=w=256:h=256:force_original_aspect_ratio=decrease my_image.png\n```\n\nThen just run the `./autogen.sh` to generate the added or updated node classes. (cf. [DEVELOPMENT][DEVELOPMENT.md])\n\n> IMPORTANT NOTE: To run `autogen.sh`, you need the [round][round], [black][black] and\n> [inkscape][inkscape] command line tools that are used for cleaning the image\n> resource filenames and formatting the generated python code.\n>\n> macOS users can download inkscape via Homebrew.\n>\n> Or you can use the docker image.\n\n[DEVELOPMENT.md]: ./DEVELOPMENT.md\n[round]: https://github.com/mingrammer/round\n[black]: https://pypi.org/project/black\n[inkscape]: https://inkscape.org/ko/release\n\n#### Update Specific Instructions for Azure Icons\n\nDownload and unzip [Azure Icons](https://learn.microsoft.com/en-us/azure/architecture/icons/)\n\nExecute inside Azure_Public_Service_Icons/Icons/\n```bash\n# Rename some diretories\nmv ai\\ +\\ machine\\ learning/ aimachinelearning/\nmv app\\ services/ appservices\nmv azure\\ stack/ azurestack\nmv azure\\ ecosystem/ azureecosystem\nmv management\\ +\\ governance/ managementgovernance\nmv  mixed\\ reality mixedreality\nmv new\\ icons/ newicons\n#  Convert Name to name\nrename -f 'y/A-Z/a-z/' ./*/*\n# Create png files and eliminate ?????-icon-service from namefile\nfind . -type f -name \"*.svg\" -exec bash -c 'inkscape -h 256  --export-filename=\"${0%.svg}.png\" \"$0\";mv \"${0%.svg}.png\" \"$(echo \"${0%.svg}.png\" | sed -r 's/[0-9]{5}-icon-service-//')\"' {} \\;\n# Delete svg files\nfind . -type f -name \"*.svg\" -exec bash -c 'rm \"$0\"' {} \\;\n```\n\nIf you get any errors with autogen, it will probably be a '+' in  filename\n\n### Add new provider\n\nTo add a new provider to Diagrams, please follow the steps below in addition to the image intructions above:\n- in `autogen.sh` add in the `providers` variable the new provider code\n- in `config.py`:\n  - in the `providers` variable, add the new provider code\n  - in the `FILE_PREFIXES` variable, add a new entry with your new provider code. And eventually a file prefix\n  - Optionnaly, update the `UPPER_WORDS` variable to a new entry with your new provider code.\n  - in the `ALIASES` variable, add a new entry with your new provider code. See below on how to add new aliases.\n- in `scripts/resource.py`:\n  - add a function `cleaner_XXX` (replace XXX by your provider name). For the implementation look at the existing functions\n  - in the `cleaners` variable, add an entry with your new provider code and the function defined above\n- in `sidebars.json`, update the `Nodes` array to add the reference of the new provider\n- in the `diagrams` folder, add a new file `__init__.py` for the new provider. For the content look at the existing providers\n\n### Update Aliases\n\nSome node classes have alias. For example, `aws.compute.ECS` class is an alias\nof `aws.compute.ElasticContainerService` class. Aliases also were auto-generated\nfrom `ALIASES` map in [config.py](config.py).\n\nSo, if you want to add new aliases or update existing aliases, you can just add\nor update the `ALIASES` map in [config.py](config.py).\n\nThen just run the `./autogen.sh` to generate the added or updated aliases. (cf. [DEVELOPMENT][DEVELOPMENT.md])\n\n> IMPORTANT NOTE: To run `autogen.sh`, you need the [round][round] and\n> [inkscape][inkscape] command line tools that are used for cleaning the image\n> resource filenames.\n>\n> macOS users can download inkscape via Homebrew.\n>\n> Or you can use the docker image.\n\n## Run Tests\n\n```shell\npython -m unittest tests/*.py -v\n```\n\n## Testing changes to the website\n\nThe [Docusaurus](https://docusaurus.io/)-based documentation website can be run by installing dependencies, then simply running `npm run start`.\n\n```bash\ncd website/\nnpm i\nnpm run start\n```\n\nThe website will be available on [http://localhost:3000](http://localhost:3000).\n\nEdit files in `website/` and `docs/` respectively to edit documentation.\n"
  },
  {
    "path": "DEVELOPMENT.md",
    "content": "# Development Guide\n\n## Docker local development setup\n\nYou should have docker installed in your system, if not click [here](https://docs.docker.com/get-docker/).\n\n1. Go to diagrams root directory.\n\n2. Build the docker image.\n\n    ```shell\n    docker build --tag diagrams:1.0 -f ./docker/dev/Dockerfile .\n    ```\n\n3. Create the container, run in background and mount the project source code.\n\n    ```shell\n    docker run -d \\\n    -it \\\n    --name diagrams \\\n    --mount type=bind,source=\"$(pwd)\",target=/usr/src/diagrams \\\n    diagrams:1.0\n    ```\n\n4. Run unit tests in the host using the container to confirm that it's working.\n\n    ```shell\n    docker exec diagrams python -m unittest tests/*.py -v\n    ```\n\n5. Run the bash script `autogen.sh` to test.\n\n    ```shell\n    docker exec diagrams ./autogen.sh\n    ```\n\n6. If the unit tests and the bash script `autogen.sh` is working correctly, then your system is now ready for development.\n\n\n## Mac local development setup\n\nTo be able to develop and run diagrams locally on you Mac device, you should have [Python](https://www.python.org/downloads/), [Go](https://golang.org/doc/install), and [brew](https://brew.sh/) installed on your system.\n\n1. Go to diagrams root directory.\n\n2. Install poetry, the Python project management package used by diagrams.\n\n    ```shell\n    pip install poetry\n    ```\n\n3. Install the project's Python dependencies.\n\n    ```shell\n    poetry install\n    ```\n\n4. Install diagrams binary dependencies.\n\n    ```shell\n    brew install imagemagick inkscape black\n    go install github.com/mingrammer/round@latest\n    # ln -sf ~/go/bin/round ~/.local/bin/round\n    ```\n\n5. Run unit tests to confirm that it's working.\n\n    ```shell\n    python -m unittest tests/*.py -v\n    ```\n\n6. Run the bash script `autogen.sh` to test.\n\n    ```shell\n    ./autogen.sh\n    ```\n\n7. If the unit tests and the bash script `autogen.sh` is working correctly, then your system is now ready for development.\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2020 MinJae Kwon\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "![diagrams logo](assets/img/diagrams.png)\n\n# Diagrams\n\n[![license](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE)\n[![pypi version](https://badge.fury.io/py/diagrams.svg)](https://badge.fury.io/py/diagrams)\n![python version](https://img.shields.io/badge/python-%3E%3D%203.9-blue?logo=python)\n![Run tests](https://github.com/mingrammer/diagrams/workflows/Run%20tests/badge.svg?branch=master)\n[![todos](https://badgen.net/https/api.tickgit.com/badgen/github.com/mingrammer/diagrams?label=todos)](https://www.tickgit.com/browse?repo=github.com/mingrammer/diagrams)\n![contributors](https://img.shields.io/github/contributors/mingrammer/diagrams)\n\n<a href=\"https://www.buymeacoffee.com/mingrammer\" target=\"_blank\"><img src=\"https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\" alt=\"Buy Me A Coffee\" style=\"height: 41px !important;width: 174px !important;box-shadow: 0px 3px 2px 0px rgba(190, 190, 190, 0.5) !important;\" ></a>\n\n**Diagram as Code**.\n\nDiagrams lets you draw the cloud system architecture **in Python code**. It was born for **prototyping** a new system architecture design without any design tools. You can also describe or visualize the existing system architecture as well. Diagrams currently supports main major providers including: `AWS`, `Azure`, `GCP`, `Kubernetes`, `Alibaba Cloud`, `Oracle Cloud` etc... It also supports `On-Premises` nodes, `SaaS` and major `Programming` frameworks and languages.\n\n**Diagram as Code** also allows you to **track** the architecture diagram changes in any **version control** system.\n\n>  NOTE: It does not control any actual cloud resources nor does it generate cloud formation or terraform code. It is just for drawing the cloud system architecture diagrams.\n\n## Providers\n\n![aws provider](https://img.shields.io/badge/AWS-orange?logo=amazon-aws&color=ff9900)\n![azure provider](https://img.shields.io/badge/Azure-orange?logo=microsoft-azure&color=0089d6)\n![gcp provider](https://img.shields.io/badge/GCP-orange?logo=google-cloud&color=4285f4)\n![ibm provider](https://img.shields.io/badge/IBM-orange?logo=ibm&color=052FAD)\n![kubernetes provider](https://img.shields.io/badge/Kubernetes-orange?logo=kubernetes&color=326ce5)\n![alibaba cloud provider](https://img.shields.io/badge/AlibabaCloud-orange?logo=alibaba-cloud&color=ff6a00)\n![oracle cloud provider](https://img.shields.io/badge/OracleCloud-orange?logo=oracle&color=f80000)\n![openstack provider](https://img.shields.io/badge/OpenStack-orange?logo=openstack&color=da1a32)\n![firebase provider](https://img.shields.io/badge/Firebase-orange?logo=firebase&color=FFCA28)\n![digital ocean provider](https://img.shields.io/badge/DigitalOcean-0080ff?logo=digitalocean&color=0080ff)\n![elastic provider](https://img.shields.io/badge/Elastic-orange?logo=elastic&color=005571)\n![outscale provider](https://img.shields.io/badge/OutScale-orange?color=5f87bf)\n![on premises provider](https://img.shields.io/badge/OnPremises-orange?color=5f87bf)\n![generic provider](https://img.shields.io/badge/Generic-orange?color=5f87bf)\n![programming provider](https://img.shields.io/badge/Programming-orange?color=5f87bf)\n![saas provider](https://img.shields.io/badge/SaaS-orange?color=5f87bf)\n![c4 provider](https://img.shields.io/badge/C4-orange?color=5f87bf)\n\n## Getting Started\n\nIt requires **Python 3.9** or higher, check your Python version first.\n\nIt uses [Graphviz](https://www.graphviz.org/) to render the diagram, so you need to [install Graphviz](https://graphviz.gitlab.io/download/) to use **diagrams**. After installing graphviz (or already have it), install the **diagrams**.\n\n> macOS users can download the Graphviz via `brew install graphviz` if you're using [Homebrew](https://brew.sh).\n\n```shell\n# using pip (pip3)\n$ pip install diagrams\n\n# using pipenv\n$ pipenv install diagrams\n\n# using poetry\n$ poetry add diagrams\n```\n\nYou can start with [quick start](https://diagrams.mingrammer.com/docs/getting-started/installation#quick-start). Check out [guides](https://diagrams.mingrammer.com/docs/guides/diagram) for more details, and you can find all available nodes list in [here](https://diagrams.mingrammer.com/docs/nodes/aws).\n\n## Examples\n\n| Event Processing                                             | Stateful Architecture                                        | Advanced Web Service                                         |\n| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| ![event processing](https://diagrams.mingrammer.com/img/event_processing_diagram.png) | ![stateful architecture](https://diagrams.mingrammer.com/img/stateful_architecture_diagram.png) | ![advanced web service with on-premises](https://diagrams.mingrammer.com/img/advanced_web_service_with_on-premises.png) |\n\nYou can find all the examples on the [examples](https://diagrams.mingrammer.com/docs/getting-started/examples) page.\n\n## Contributing\n\nTo contribute to diagram, check out [contribution guidelines](CONTRIBUTING.md).\n\n> Let me know if you are using diagrams! I'll add you in showcase page. (I'm working on it!) :)\n\n## Who uses it?\n\n[Apache Airflow](https://github.com/apache/airflow) is the most popular data workflow Orchestrator. Airflow uses Diagrams to generate architecture diagrams in their documentation.\n\n[Cloudiscovery](https://github.com/Cloud-Architects/cloudiscovery) helps you to analyze resources in your cloud (AWS/GCP/Azure/Alibaba/IBM) account. It allows you to create a diagram of analyzed cloud resource map based on this Diagrams library, so you can draw your existing cloud infrastructure with Cloudiscovery.\n\n[Airflow Diagrams](https://github.com/feluelle/airflow-diagrams) is an Airflow plugin that aims to easily visualise your Airflow DAGs on service level from providers like AWS, GCP, Azure, etc. via diagrams.\n\n[KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) is a tool to generate Kubernetes architecture diagrams from Kubernetes manifest files, kustomization files, Helm charts, and actual cluster state. [KubeDiagrams](https://github.com/philippemerle/KubeDiagrams) supports all Kubernetes built-in resources, any custom resources, and label-based resource clustering.\n\n[AWS CloudFormation Diagrams](https://github.com/philippemerle/AWS-CloudFormation-Diagrams) is a simple CLI script to generate AWS architecture diagrams from AWS CloudFormation templates.\n\n## Other languages\n\n- If you are familiar with Go, you can use [go-diagrams](https://github.com/blushft/go-diagrams) as well.\n\n## License\n\n[MIT](LICENSE)\n"
  },
  {
    "path": "autogen.sh",
    "content": "#!/bin/bash\necho \"starting\"\napp_root_dir=\"diagrams\"\n\n# NOTE: azure icon set is not latest version\nproviders=(\n  \"onprem\"\n  \"aws\"\n  \"azure\"\n  \"digitalocean\"\n  \"gcp\"\n  \"ibm\"\n  \"firebase\"\n  \"k8s\"\n  \"alibabacloud\"\n  \"oci\"\n  \"programming\"\n  \"saas\"\n  \"elastic\"\n  \"generic\"\n  \"openstack\"\n  \"outscale\"\n  \"gis\"\n)\n\nif ! [ -x \"$(command -v round)\" ]; then\n  echo 'round is not installed'\n  exit 1\nfi\n\nif ! [ -x \"$(command -v inkscape)\" ]; then\n  echo 'inkscape is not installed'\n  exit 1\nfi\n\nif ! [ -x \"$(command -v convert)\" ]; then\n  echo 'image magick is not installed'\n  exit 1\nfi\n\nif ! [ -x \"$(command -v black)\" ]; then\n  echo 'black is not installed'\n  exit 1\nfi\n\n# preprocess the resources\nfor pvd in \"${providers[@]}\"; do\n  # convert the svg to png for azure provider\n  if [ \"$pvd\" = \"onprem\" ] || [ \"$pvd\" = \"azure\" ]; then\n    echo \"converting the svg to png using inkscape for provider '$pvd'\"\n    python -m scripts.resource svg2png \"$pvd\"\n  fi\n  if [ \"$pvd\" == \"oci\" ] || [ \"$pvd\" = \"ibm\" ]; then\n    echo \"converting the svg to png using image magick for provider '$pvd'\"\n    python -m scripts.resource svg2png2 \"$pvd\"\n  fi\n  echo \"cleaning the resource names for provider '$pvd'\"\n  python -m scripts.resource clean \"$pvd\"\n  # round the all png images for aws provider\n  if [ \"$pvd\" = \"aws\" ]; then\n    echo \"rounding the resources for provider '$pvd'\"\n    python -m scripts.resource round \"$pvd\"\n  fi\ndone\n\n# generate the module classes and docs\nfor pvd in \"${providers[@]}\"; do\n  echo \"generating the modules & docs for provider '$pvd'\"\n  python -m scripts.generate \"$pvd\"\ndone\n\n# Generate doc for custom module\necho \"generating the docs for custom\"\npython -m scripts.generate \"custom\"\n\n# copy icons across to website\necho \"copying icons to website static folder\"\ncp -r resources website/static/img/\n\n# run black\necho \"linting the all the diagram modules\"\nblack \"$app_root_dir\"/**/*.py\n"
  },
  {
    "path": "config.py",
    "content": "# fmt: off\n\n#########################\n#      Application      #\n#########################\n\nAPP_NAME = \"diagrams\"\n\nDIR_DOC_ROOT = \"docs/nodes\"\nDIR_APP_ROOT = \"diagrams\"\nDIR_RESOURCE = \"resources\"\nDIR_TEMPLATE = \"templates\"\n\nPROVIDERS = (\n    \"base\",\n    \"onprem\",\n    \"aws\",\n    \"azure\",\n    \"digitalocean\",\n    \"gcp\",\n    \"ibm\",\n    \"firebase\",\n    \"k8s\",\n    \"alibabacloud\",\n    \"oci\",\n    \"programming\",\n    \"saas\",\n    \"elastic\",\n    \"generic\",\n    \"openstack\",\n    \"outscale\",\n    \"gis\"\n)\n\n#########################\n#  Resource Processing  #\n#########################\n\nCMD_ROUND = \"round\"\nCMD_ROUND_OPTS = (\"-w\",)\nCMD_SVG2PNG = \"inkscape\"\nCMD_SVG2PNG_OPTS = (\"-w\", \"256\", \"-h\", \"256\", \"--export-type\", \"png\")\nCMD_SVG2PNG_IM = \"convert\"\nCMD_SVG2PNG_IM_OPTS = (\"-shave\", \"25%x25%\", \"-resize\", \"256x256!\")\n\nFILE_PREFIXES = {\n    \"onprem\": (),\n    \"aws\": (\"Amazon-\", \"AWS-\"),\n    \"azure\": (\"Azure-\",),\n    \"digitalocean\": (),\n    \"gcp\": (\"Cloud-\",),\n    \"firebase\": (\"Cloud-\",),\n    \"ibm\": (),\n    \"k8s\": (),\n    \"alibabacloud\": (),\n    \"oci\": (\"OCI-icon-\",),\n    \"programming\": (),\n    \"saas\": (),\n    \"elastic\": (),\n    \"outscale\": (),\n    \"generic\": (),\n    \"openstack\": (),\n    \"gis\": (),\n}\n\n#########################\n#  Doc Auto Generation  #\n#########################\n\nTMPL_APIDOC = \"apidoc.tmpl\"\n\n#########################\n# Class Auto Generation #\n#########################\n\nTMPL_MODULE = \"module.tmpl\"\n\nUPPER_WORDS = {\n    \"aws\": (\"aws\", \"api\", \"ebs\", \"ec2\", \"efs\", \"emr\", \"rds\", \"ml\", \"mq\", \"nat\", \"vpc\", \"waf\", \"sdk\"),\n    \"azure\": (\"ad\", \"b2c\", \"ai\", \"api\", \"cdn\", \"ddos\", \"dns\", \"fxt\", \"hana\", \"hd\", \"id\", \"sap\", \"sql\", \"vm\", \"vpn\", \"vpc\"),\n    \"gcp\": (\"gcp\", \"ai\", \"api\", \"cdn\", \"dns\", \"gke\", \"gpu\", \"iap\", \"ids\", \"ml\", \"nat\", \"os\", \"sdk\", \"sql\", \"ssd\", \"tpu\", \"vpn\"),\n    \"firebase\": (\"ab\", \"fcm\", \"ml\"),\n    \"k8s\": (\n        \"api\", \"cm\", \"ccm\", \"crb\", \"crd\", \"ds\", \"etcd\", \"hpa\", \"k8s\", \"ns\", \"psp\", \"pv\", \"pvc\", \"rb\", \"rs\",\n        \"sa\", \"sc\", \"sts\", \"svc\",\n    ),\n    \"oci\": (\"oci\", \"ocid\", \"oke\", \"ocir\", \"ddos\", \"waf\", \"bm\", \"vm\", \"cdn\", \"vpn\", \"dns\", \"nat\", \"dms\", \"api\", \"id\"),\n    \"elastic\": (\"apm\", \"siem\", \"ece\", \"eck\", \"sql\"),\n    \"generic\": (\"vpn\", \"ios\", \"xen\", \"sql\", \"lxc\"),\n    \"outscale\": (\"osc\",),\n    \"openstack\": (\"rpm\", \"loci\", \"nfv\", \"ec2api\"),\n    \"pve\": (\"pve\",),\n    \"ibm\": (\"ibm\",),\n    \"gis\": (\"gis\",\"ban\",\"ign\",\"ogc\",\"qgis\",\"wfs\",\"wms\"),\n}\n\nTITLE_WORDS = {\n    \"onprem\": {\n        \"onprem\": \"OnPrem\",\n    },\n    \"alibabacloud\": {\n        \"alibabacloud\": \"AlibabaCloud\"\n    },\n    \"aws\": {\n        \"cloudfront\": \"CloudFront\"\n    },\n    \"digitalocean\": {\n        \"digitalocean\": \"DigitalOcean\"\n    },\n    \"openstack\": {\n        \"openstack\": \"OpenStack\"\n    },\n    \"ibm\": {\n        \"ibm\": \"IBMCloud\"\n    },\n}\n\n# TODO: check if the classname exists\nALIASES = {\n    \"onprem\": {\n        \"analytics\": {\n            \"Powerbi\": \"PowerBI\"\n        },\n        \"ci\": {\n            \"Circleci\": \"CircleCI\",\n            \"Concourseci\": \"ConcourseCI\",\n            \"Droneci\": \"DroneCI\",\n            \"Gitlabci\": \"GitlabCI\",\n            \"Travisci\": \"TravisCI\",\n            \"Teamcity\": \"TC\",\n            \"Zuulci\": \"ZuulCI\",\n        },\n        \"container\": {\n            \"Lxc\": \"LXC\",\n            \"Rkt\": \"RKT\",\n        },\n        \"database\": {\n            \"Clickhouse\": \"ClickHouse\",\n            \"Cockroachdb\": \"CockroachDB\",\n            \"Couchdb\": \"CouchDB\",\n            \"Hbase\": \"HBase\",\n            \"Influxdb\": \"InfluxDB\",\n            \"Janusgraph\": \"JanusGraph\",\n            \"Mariadb\": \"MariaDB\",\n            \"Mongodb\": \"MongoDB\",\n            \"Mssql\": \"MSSQL\",\n            \"Mysql\": \"MySQL\",\n            \"Postgresql\": \"PostgreSQL\",\n            \"Qdrant\": \"Qdrant\",\n        },\n        \"gitops\": {\n            \"Argocd\": \"ArgoCD\",\n        },\n        \"logging\": {\n            \"Fluentbit\": \"FluentBit\",\n            \"Rsyslog\": \"RSyslog\",\n        },\n        \"network\": {\n            \"Etcd\": \"ETCD\",\n            \"Haproxy\": \"HAProxy\",\n            \"OpenServiceMesh\": \"OSM\",\n            \"Opnsense\": \"OPNSense\",\n            \"Pfsense\": \"PFSense\",\n            \"Vyos\": \"VyOS\"\n        },\n        \"proxmox\": {\n            \"Pve\": \"ProxmoxVE\",\n        },\n        \"queue\": {\n            \"Activemq\": \"ActiveMQ\",\n            \"Emqx\": \"EMQX\",\n            \"Rabbitmq\": \"RabbitMQ\",\n            \"Zeromq\": \"ZeroMQ\",\n        },\n        \"storage\": {\n            \"Ceph\": \"CEPH\",\n            \"CephOsd\": \"CEPH_OSD\",\n        },\n        \"workflow\": {\n            \"Kubeflow\": \"KubeFlow\",\n            \"Nifi\": \"NiFi\",\n        }\n    },\n    \"aws\": {\n        \"analytics\": {\n            \"ElasticsearchService\": \"ES\",\n        },\n        \"business\": {\n            \"AlexaForBusiness\": \"A4B\"\n        },\n        \"blockchain\": {\n            \"QuantumLedgerDatabaseQldb\": \"QLDB\"\n        },\n        \"compute\": {\n            \"ApplicationAutoScaling\": \"AutoScaling\",\n            \"EC2Ami\": \"AMI\",\n            \"EC2ContainerRegistry\": \"ECR\",\n            \"ElasticBeanstalk\": \"EB\",\n            \"ElasticContainerService\": \"ECS\",\n            \"ElasticKubernetesService\": \"EKS\",\n            \"ServerlessApplicationRepository\": \"SAR\",\n        },\n        \"database\": {\n            \"DatabaseMigrationService\": \"DMS\",\n            \"DocumentdbMongodbCompatibility\": \"DocumentDB\",\n            \"DynamodbDax\": \"DAX\",\n            \"DynamodbGlobalSecondaryIndex\": \"DynamodbGSI\",\n            \"Database\": \"DB\",\n            \"Dynamodb\": \"DDB\",\n            \"Elasticache\": \"ElastiCache\",\n            \"QuantumLedgerDatabaseQldb\": \"QLDB\",\n        },\n        \"devtools\": {\n            \"CommandLineInterface\": \"CLI\",\n            \"DeveloperTools\": \"DevTools\",\n        },\n        \"engagement\": {\n            \"SimpleEmailServiceSes\": \"SES\",\n        },\n        \"general\": {\n            \"GenericOfficeBuilding\": \"OfficeBuilding\",\n        },\n        \"integration\": {\n            \"SimpleNotificationServiceSns\": \"SNS\",\n            \"SimpleQueueServiceSqs\": \"SQS\",\n            \"StepFunctions\": \"SF\",\n        },\n        \"iot\": {\n            \"Freertos\": \"FreeRTOS\",\n            \"IotHardwareBoard\": \"IotBoard\",\n        },\n        \"management\": {\n            \"SystemsManager\": \"SSM\",\n            \"SystemsManagerParameterStore\": \"ParameterStore\",\n        },\n        \"migration\": {\n            \"ApplicationDiscoveryService\": \"ADS\",\n            \"CloudendureMigration\": \"CEM\",\n            \"DatabaseMigrationService\": \"DMS\",\n            \"MigrationAndTransfer\": \"MAT\",\n            \"ServerMigrationService\": \"SMS\",\n        },\n        \"ml\": {\n            \"DeepLearningContainers\": \"DLC\",\n        },\n        \"network\": {\n            \"CloudFront\": \"CF\",\n            \"ElasticLoadBalancing\": \"ELB\",\n            \"ElbApplicationLoadBalancer\": \"ALB\",\n            \"ElbClassicLoadBalancer\": \"CLB\",\n            \"ElbNetworkLoadBalancer\": \"NLB\",\n            \"GlobalAccelerator\": \"GAX\",\n            \"InternetGateway\": \"IGW\",\n            \"TransitGateway\": \"TGW\",\n            \"TransitGatewayAttachment\": \"TGWAttach\",\n        },\n        \"security\": {\n            \"CertificateManager\": \"ACM\",\n            \"Cloudhsm\": \"CloudHSM\",\n            \"DirectoryService\": \"DS\",\n            \"FirewallManager\": \"FMS\",\n            \"IdentityAndAccessManagementIamAccessAnalyzer\": \"IAMAccessAnalyzer\",\n            \"IdentityAndAccessManagementIamAWSSts\": \"IAMAWSSts\",\n            \"IdentityAndAccessManagementIamPermissions\": \"IAMPermissions\",\n            \"IdentityAndAccessManagementIamRole\": \"IAMRole\",\n            \"IdentityAndAccessManagementIam\": \"IAM\",\n            \"KeyManagementService\": \"KMS\",\n            \"ResourceAccessManager\": \"RAM\",\n        },\n        \"storage\": {\n            \"CloudendureDisasterRecovery\": \"CDR\",\n            \"ElasticBlockStoreEBS\": \"EBS\",\n            \"ElasticFileSystemEFS\": \"EFS\",\n            \"Fsx\": \"FSx\",\n            \"SimpleStorageServiceS3\": \"S3\",\n        },\n    },\n    \"azure\": {\n        \"compute\": {\n            \"ContainerRegistries\": \"ACR\",\n            \"KubernetesServices\": \"AKS\",\n            \"VMScaleSet\": \"VMSS\"\n        },\n    },\n    \"gcp\": {\n        \"analytics\": {\n            \"Bigquery\": \"BigQuery\",\n            \"Pubsub\": \"PubSub\",\n        },\n        \"compute\": {\n            \"AppEngine\": \"GAE\",\n            \"ComputeEngine\": \"GCE\",\n            \"Functions\": \"GCF\",\n            \"KubernetesEngine\": \"GKE\",\n            \"Run\": \"CloudRun\",\n        },\n        \"database\": {\n            \"Bigtable\": \"BigTable\",\n        },\n        \"devtools\": {\n            \"ContainerRegistry\": \"GCR\",\n        },\n        \"migration\": {\n            \"MigrateComputeEngine\": \"CE\",\n        },\n        \"ml\": {\n            \"Automl\": \"AutoML\",\n            \"NaturalLanguageAPI\": \"NLAPI\",\n            \"SpeechToText\": \"STT\",\n            \"TextToSpeech\": \"TTS\",\n        },\n        \"network\": {\n            \"CloudIDS\": \"IDS\",\n            \"PrivateServiceConnect\": \"PSC\",\n            \"VirtualPrivateCloud\": \"VPC\",\n        },\n        \"security\": {\n            \"AccessContextManager\": \"ACM\",\n            \"KeyManagementService\": \"KMS\",\n            \"SecurityCommandCenter\": \"SCC\",\n        },\n        \"storage\": {\n            \"LocalSSD\": \"SSD\",\n            \"Storage\": \"GCS\",\n        },\n    },\n    \"firebase\": {\n        \"grow\": {\n            \"Messaging\": \"FCM\"\n        }\n    },\n    \"k8s\": {\n        \"clusterconfig\": {\n            \"Limits\": \"LimitRange\",\n            \"HPA\": \"HorizontalPodAutoscaler\",\n        },\n        \"compute\": {\n            \"Deploy\": \"Deployment\",\n            \"DS\": \"DaemonSet\",\n            \"RS\": \"ReplicaSet\",\n            \"STS\": \"StatefulSet\"\n        },\n        \"controlplane\": {\n            \"API\": \"APIServer\",\n            \"CM\": \"ControllerManager\",\n            \"KProxy\": \"KubeProxy\",\n            \"Sched\": \"Scheduler\",\n        },\n        \"group\": {\n            \"NS\": \"Namespace\",\n        },\n        \"network\": {\n            \"Ep\": \"Endpoint\",\n            \"Ing\": \"Ingress\",\n            \"Netpol\": \"NetworkPolicy\",\n            \"SVC\": \"Service\",\n        },\n        \"podconfig\": {\n            \"CM\": \"ConfigMap\",\n        },\n        \"rbac\": {\n            \"CRole\": \"ClusterRole\",\n            \"CRB\": \"ClusterRoleBinding\",\n            \"RB\": \"RoleBinding\",\n            \"SA\": \"ServiceAccount\",\n        },\n        \"storage\": {\n            \"PV\": \"PersistentVolume\",\n            \"PVC\": \"PersistentVolumeClaim\",\n            \"SC\": \"StorageClass\",\n            \"Vol\": \"Volume\",\n        },\n    },\n    \"alibabacloud\": {\n        \"application\": {\n            \"LogService\": \"SLS\",\n            \"MessageNotificationService\": \"MNS\",\n            \"PerformanceTestingService\": \"PTS\",\n            \"SmartConversationAnalysis\": \"SCA\",\n        },\n        \"compute\": {\n            \"AutoScaling\": \"ESS\",\n            \"ElasticComputeService\": \"ECS\",\n            \"ElasticContainerInstance\": \"ECI\",\n            \"ElasticHighPerformanceComputing\": \"EHPC\",\n            \"FunctionCompute\": \"FC\",\n            \"OperationOrchestrationService\": \"OOS\",\n            \"ResourceOrchestrationService\": \"ROS\",\n            \"ServerLoadBalancer\": \"SLB\",\n            \"ServerlessAppEngine\": \"SAE\",\n            \"SimpleApplicationServer\": \"SAS\",\n            \"WebAppService\": \"WAS\",\n        },\n        \"database\": {\n            \"DataManagementService\": \"DMS\",\n            \"DataTransmissionService\": \"DTS\",\n            \"DatabaseBackupService\": \"DBS\",\n            \"DisributeRelationalDatabaseService\": \"DRDS\",\n            \"GraphDatabaseService\": \"GDS\",\n            \"RelationalDatabaseService\": \"RDS\",\n        },\n        \"network\": {\n            \"CloudEnterpriseNetwork\": \"CEN\",\n            \"ElasticIpAddress\": \"EIP\",\n            \"ServerLoadBalancer\": \"SLB\",\n            \"VirtualPrivateCloud\": \"VPC\",\n        },\n        \"security\": {\n            \"AntiBotService\": \"ABS\",\n            \"AntifraudService\": \"AS\",\n            \"CloudFirewall\": \"CFW\",\n            \"ContentModeration\": \"CM\",\n            \"DataEncryptionService\": \"DES\",\n            \"WebApplicationFirewall\": \"WAF\",\n        },\n        \"storage\": {\n            \"FileStorageHdfs\": \"HDFS\",\n            \"FileStorageNas\": \"NAS\",\n            \"HybridBackupRecovery\": \"HBR\",\n            \"HybridCloudDisasterRecovery\": \"HDR\",\n            \"ObjectStorageService\": \"OSS\",\n            \"ObjectTableStore\": \"OTS\",\n        }\n    },\n    \"digitalocean\": {},\n    \"gis\": {},\n    \"oci\": {\n        \"compute\": {\n            \"VM\": \"VirtualMachine\",\n            \"VMWhite\": \"VirtualMachineWhite\",\n            \"BM\": \"BareMetal\",\n            \"BMWhite\": \"BareMetalWhite\",\n            \"OCIR\": \"OCIRegistry\",\n            \"OCIRWhite\": \"OCIRegistryWhite\",\n            \"OKE\": \"ContainerEngine\",\n            \"OKEWhite\": \"ContainerEngineWhite\",\n        },\n        \"database\": {\n            \"Autonomous\": \"ADB\",\n            \"AutonomousWhite\": \"ADBWhite\",\n            \"DatabaseService\": \"DBService\",\n            \"DatabaseServiceWhite\": \"DBServiceWhite\",\n        }\n    },\n    \"programming\": {\n        \"framework\": {\n            \"Fastapi\": \"FastAPI\",\n            \"Graphql\": \"GraphQL\",\n            \"Dotnet\": \"DotNet\",\n            \"Nextjs\": \"NextJs\"\n        },\n        \"language\": {\n            \"Javascript\": \"JavaScript\",\n            \"Nodejs\": \"NodeJS\",\n            \"Php\": \"PHP\",\n            \"Typescript\": \"TypeScript\"\n        },\n    },\n    \"saas\": {\n        \"logging\": {\n            \"Datadog\": \"DataDog\",\n            \"Newrelic\": \"NewRelic\"\n        }\n    },\n    \"elastic\": {\n        \"elasticsearch\": {\n            \"Elasticsearch\": \"ElasticSearch\",\n            \"Logstash\": \"LogStash\",\n            \"MachineLearning\": \"ML\",\n        }\n    },\n    \"outscale\": {\n        \"Osc\": \"OSC\",\n    },\n    \"ibm\": {},\n    \"generic\": {},\n    \"openstack\": {\n        \"user\": {\n            \"Openstackclient\": \"OpenStackClient\",\n        },\n        \"billing\": {\n            \"Cloudkitty\": \"CloudKitty\",\n        },\n        \"deployment\": {\n            \"Kolla\": \"KollaAnsible\",\n            \"Tripleo\": \"TripleO\",\n        }\n    },\n}\n"
  },
  {
    "path": "diagrams/__init__.py",
    "content": "import contextvars\nimport os\nimport uuid\nfrom pathlib import Path\nfrom typing import Dict, List, Optional, Union\n\nfrom graphviz import Digraph\n\n# Theme definitions for diagram styling\n# Each theme defines: cluster background colors (by depth), border color, edge color\nTHEMES = {\n    \"neutral\": {\n        \"bgcolor\": (\"#F8F9FA\", \"#F1F3F5\", \"#E9ECEF\", \"#DEE2E6\"),\n        \"pencolor\": \"#ADB5BD\",\n        \"edgecolor\": \"#495057\",\n    },\n    \"pastel\": {\n        \"bgcolor\": (\"#E5F5FD\", \"#EBF3E7\", \"#ECE8F6\", \"#FDF7E3\"),\n        \"pencolor\": \"#AEB6BE\",\n        \"edgecolor\": \"#7B8894\",\n    },\n    \"blues\": {\n        \"bgcolor\": (\"#E7F5FF\", \"#D0EBFF\", \"#A5D8FF\", \"#74C0FC\"),\n        \"pencolor\": \"#339AF0\",\n        \"edgecolor\": \"#1971C2\",\n    },\n    \"greens\": {\n        \"bgcolor\": (\"#EBFBEE\", \"#D3F9D8\", \"#B2F2BB\", \"#8CE99A\"),\n        \"pencolor\": \"#40C057\",\n        \"edgecolor\": \"#2F9E44\",\n    },\n    \"orange\": {\n        \"bgcolor\": (\"#FFF4E6\", \"#FFE8CC\", \"#FFD8A8\", \"#FFC078\"),\n        \"pencolor\": \"#FD7E14\",\n        \"edgecolor\": \"#E8590C\",\n    },\n}\n\n# Global contexts for a diagrams and a cluster.\n#\n# These global contexts are for letting the clusters and nodes know\n# where context they are belong to. So the all clusters and nodes does\n# not need to specify the current diagrams or cluster via parameters.\n__diagram = contextvars.ContextVar(\"diagrams\")\n__cluster = contextvars.ContextVar(\"cluster\")\n\n\ndef getdiagram() -> \"Diagram\":\n    try:\n        return __diagram.get()\n    except LookupError:\n        return None\n\n\ndef setdiagram(diagram: \"Diagram\"):\n    __diagram.set(diagram)\n\n\ndef getcluster() -> \"Cluster\":\n    try:\n        return __cluster.get()\n    except LookupError:\n        return None\n\n\ndef setcluster(cluster: \"Cluster\"):\n    __cluster.set(cluster)\n\n\nclass Diagram:\n    __directions = (\"TB\", \"BT\", \"LR\", \"RL\")\n    __curvestyles = (\"ortho\", \"curved\", \"spline\", \"polyline\")\n    __outformats = (\"png\", \"jpg\", \"svg\", \"pdf\", \"dot\")\n\n    # fmt: off\n    _default_graph_attrs = {\n        \"pad\": \"2.0\",\n        \"splines\": \"spline\",\n        \"nodesep\": \"0.70\",\n        \"ranksep\": \"0.90\",\n        \"fontname\": \"Sans-Serif\",\n        \"fontsize\": \"15\",\n        \"fontcolor\": \"#2D3436\",\n    }\n    _default_node_attrs = {\n        \"shape\": \"box\",\n        \"style\": \"rounded\",\n        \"fixedsize\": \"true\",\n        \"width\": \"1.4\",\n        \"height\": \"1.4\",\n        \"labelloc\": \"b\",\n        # imagepos attribute is not backward compatible\n        # TODO: check graphviz version to see if \"imagepos\" is available >= 2.40\n        # https://github.com/xflr6/graphviz/blob/master/graphviz/backend.py#L248\n        # \"imagepos\": \"tc\",\n        \"imagescale\": \"true\",\n        \"fontname\": \"Sans-Serif\",\n        \"fontsize\": \"13\",\n        \"fontcolor\": \"#2D3436\",\n    }\n    _default_edge_attrs = {\n        \"color\": \"#495057\",\n        \"arrowsize\": \"0.8\",\n    }\n\n    # fmt: on\n\n    # TODO: Label position option\n    # TODO: Save directory option (filename + directory?)\n    def __init__(\n        self,\n        name: str = \"\",\n        filename: str = \"\",\n        direction: str = \"LR\",\n        curvestyle: str = \"spline\",\n        outformat: Union[str, list[str]] = \"png\",\n        autolabel: bool = False,\n        show: bool = True,\n        strict: bool = False,\n        theme: str = \"neutral\",\n        graph_attr: Optional[dict] = None,\n        node_attr: Optional[dict] = None,\n        edge_attr: Optional[dict] = None,\n    ):\n        \"\"\"Diagram represents a global diagrams context.\n\n        :param name: Diagram name. It will be used for output filename if the\n            filename isn't given.\n        :param filename: The output filename, without the extension (.png).\n            If not given, it will be generated from the name.\n        :param direction: Data flow direction. Default is 'left to right'.\n        :param curvestyle: Edge routing style. One of \"ortho\", \"curved\", \"spline\", or \"polyline\".\n        :param outformat: Output file format. Default is 'png'.\n        :param show: Open generated image after save if true, just only save otherwise.\n        :param theme: Color theme. One of \"neutral\", \"pastel\", \"blues\", \"greens\", \"orange\".\n        :param graph_attr: Provide graph_attr dot config attributes.\n        :param node_attr: Provide node_attr dot config attributes.\n        :param edge_attr: Provide edge_attr dot config attributes.\n        :param strict: Rendering should merge multi-edges.\n        \"\"\"\n        if graph_attr is None:\n            graph_attr = {}\n        if node_attr is None:\n            node_attr = {}\n        if edge_attr is None:\n            edge_attr = {}\n\n        # Validate and set theme\n        if theme not in THEMES:\n            raise ValueError(f'\"{theme}\" is not a valid theme. Choose from: {\", \".join(THEMES.keys())}')\n        self.theme = theme\n        self._theme_config = THEMES[theme]\n\n        self.name = name\n        if not name and not filename:\n            filename = \"diagrams_image\"\n        elif not filename:\n            filename = \"_\".join(self.name.split()).lower()\n        self.filename = filename\n        self.dot = Digraph(self.name, filename=self.filename, strict=strict)\n\n        # Set attributes.\n        for k, v in self._default_graph_attrs.items():\n            self.dot.graph_attr[k] = v\n        self.dot.graph_attr[\"label\"] = self.name\n        for k, v in self._default_node_attrs.items():\n            self.dot.node_attr[k] = v\n        for k, v in self._default_edge_attrs.items():\n            self.dot.edge_attr[k] = v\n\n        # Apply theme edge color\n        self.dot.edge_attr[\"color\"] = self._theme_config[\"edgecolor\"]\n\n        if not self._validate_direction(direction):\n            raise ValueError(f'\"{direction}\" is not a valid direction')\n        self.dot.graph_attr[\"rankdir\"] = direction\n\n        if not self._validate_curvestyle(curvestyle):\n            raise ValueError(f'\"{curvestyle}\" is not a valid curvestyle')\n        self.dot.graph_attr[\"splines\"] = curvestyle\n\n        if isinstance(outformat, list):\n            for one_format in outformat:\n                if not self._validate_outformat(one_format):\n                    raise ValueError(\n                        f'\"{one_format}\" is not a valid output format')\n        else:\n            if not self._validate_outformat(outformat):\n                raise ValueError(f'\"{outformat}\" is not a valid output format')\n        self.outformat = outformat\n\n        # Merge passed in attributes\n        self.dot.graph_attr.update(graph_attr)\n        self.dot.node_attr.update(node_attr)\n        self.dot.edge_attr.update(edge_attr)\n\n        self.show = show\n        self.autolabel = autolabel\n\n    def __str__(self) -> str:\n        return str(self.dot)\n\n    def __enter__(self):\n        setdiagram(self)\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        self.render()\n        # Remove the graphviz file leaving only the image.\n        os.remove(self.filename)\n        setdiagram(None)\n\n    def _repr_png_(self):\n        return self.dot.pipe(format=\"png\")\n\n    def _validate_direction(self, direction: str) -> bool:\n        return direction.upper() in self.__directions\n\n    def _validate_curvestyle(self, curvestyle: str) -> bool:\n        return curvestyle.lower() in self.__curvestyles\n\n    def _validate_outformat(self, outformat: str) -> bool:\n        return outformat.lower() in self.__outformats\n\n    def node(self, nodeid: str, label: str, **attrs) -> None:\n        \"\"\"Create a new node.\"\"\"\n        self.dot.node(nodeid, label=label, **attrs)\n\n    def connect(self, node: \"Node\", node2: \"Node\", edge: \"Edge\") -> None:\n        \"\"\"Connect the two Nodes.\"\"\"\n        self.dot.edge(node.nodeid, node2.nodeid, **edge.attrs)\n\n    def subgraph(self, dot: Digraph) -> None:\n        \"\"\"Create a subgraph for clustering\"\"\"\n        self.dot.subgraph(dot)\n\n    def render(self) -> None:\n        if isinstance(self.outformat, list):\n            for one_format in self.outformat:\n                self.dot.render(format=one_format, view=self.show, quiet=True)\n        else:\n            self.dot.render(format=self.outformat, view=self.show, quiet=True)\n\n\nclass Cluster:\n    __directions = (\"TB\", \"BT\", \"LR\", \"RL\")\n\n    # fmt: off\n    _default_graph_attrs = {\n        \"shape\": \"box\",\n        \"style\": \"rounded\",\n        \"labeljust\": \"l\",\n        \"fontname\": \"Sans-Serif\",\n        \"fontsize\": \"12\",\n    }\n\n    # fmt: on\n\n    # FIXME:\n    #  Cluster direction does not work now. Graphviz couldn't render\n    #  correctly for a subgraph that has a different rank direction.\n    def __init__(\n        self,\n        label: str = \"cluster\",\n        direction: str = \"LR\",\n        graph_attr: Optional[dict] = None,\n    ):\n        \"\"\"Cluster represents a cluster context.\n\n        :param label: Cluster label.\n        :param direction: Data flow direction. Default is 'left to right'.\n        :param graph_attr: Provide graph_attr dot config attributes.\n        \"\"\"\n        if graph_attr is None:\n            graph_attr = {}\n        self.label = label\n        self.name = \"cluster_\" + self.label\n\n        # Node must belong to a diagram.\n        self._diagram = getdiagram()\n        if self._diagram is None:\n            raise EnvironmentError(\"Global diagrams context not set up\")\n        self._parent = getcluster()\n\n        # Get theme configuration from the diagram\n        theme_config = self._diagram._theme_config\n\n        self.dot = Digraph(self.name)\n\n        # Set attributes.\n        for k, v in self._default_graph_attrs.items():\n            self.dot.graph_attr[k] = v\n        self.dot.graph_attr[\"label\"] = self.label\n\n        # Apply theme colors\n        self.dot.graph_attr[\"pencolor\"] = theme_config[\"pencolor\"]\n\n        if not self._validate_direction(direction):\n            raise ValueError(f'\"{direction}\" is not a valid direction')\n        self.dot.graph_attr[\"rankdir\"] = direction\n\n        # Set cluster depth for distinguishing the background color\n        self.depth = self._parent.depth + 1 if self._parent else 0\n        bgcolors = theme_config[\"bgcolor\"]\n        coloridx = self.depth % len(bgcolors)\n        self.dot.graph_attr[\"bgcolor\"] = bgcolors[coloridx]\n\n        # Merge passed in attributes\n        self.dot.graph_attr.update(graph_attr)\n\n    def __enter__(self):\n        setcluster(self)\n        return self\n\n    def __exit__(self, exc_type, exc_value, traceback):\n        if self._parent:\n            self._parent.subgraph(self.dot)\n        else:\n            self._diagram.subgraph(self.dot)\n        setcluster(self._parent)\n\n    def _validate_direction(self, direction: str) -> bool:\n        return direction.upper() in self.__directions\n\n    def node(self, nodeid: str, label: str, **attrs) -> None:\n        \"\"\"Create a new node in the cluster.\"\"\"\n        self.dot.node(nodeid, label=label, **attrs)\n\n    def subgraph(self, dot: Digraph) -> None:\n        self.dot.subgraph(dot)\n\n\nclass Node:\n    \"\"\"Node represents a node for a specific backend service.\"\"\"\n\n    _provider = None\n    _type = None\n\n    _icon_dir = None\n    _icon = None\n\n    _height = 1.9\n\n    def __init__(self, label: str = \"\", *, nodeid: str = None, **attrs: Dict):\n        \"\"\"Node represents a system component.\n\n        :param label: Node label.\n        \"\"\"\n        # Generates an ID for identifying a node, unless specified\n        self._id = nodeid or self._rand_id()\n        self.label = label\n\n        # Node must belong to a diagram.\n        self._diagram = getdiagram()\n        if self._diagram is None:\n            raise EnvironmentError(\"Global diagrams context not set up\")\n\n        if self._diagram.autolabel:\n            prefix = self.__class__.__name__\n            if self.label:\n                self.label = prefix + \"\\n\" + self.label\n            else:\n                self.label = prefix\n\n        # fmt: off\n        # If a node has an icon, increase the height slightly to avoid\n        # that label being spanned between icon image and white space.\n        # Increase the height by the number of new lines included in the label.\n        padding = 0.4 * (self.label.count('\\n'))\n        self._attrs = {\n            \"shape\": \"none\",\n            \"height\": str(self._height + padding),\n            \"image\": self._load_icon(),\n        } if self._icon else {}\n\n        # fmt: on\n        self._attrs.update(attrs)\n\n        self._cluster = getcluster()\n\n        # If a node is in the cluster context, add it to cluster.\n        if self._cluster:\n            self._cluster.node(self._id, self.label, **self._attrs)\n        else:\n            self._diagram.node(self._id, self.label, **self._attrs)\n\n    def __repr__(self):\n        _name = self.__class__.__name__\n        return f\"<{self._provider}.{self._type}.{_name}>\"\n\n    def __sub__(self, other: Union[\"Node\", List[\"Node\"], \"Edge\"]):\n        \"\"\"Implement Self - Node, Self - [Nodes] and Self - Edge.\"\"\"\n        if isinstance(other, list):\n            for node in other:\n                self.connect(node, Edge(self))\n            return other\n        elif isinstance(other, Node):\n            return self.connect(other, Edge(self))\n        else:\n            other.node = self\n            return other\n\n    def __rsub__(self, other: Union[List[\"Node\"], List[\"Edge\"]]):\n        \"\"\"Called for [Nodes] and [Edges] - Self because list don't have __sub__ operators.\"\"\"\n        for o in other:\n            if isinstance(o, Edge):\n                o.connect(self)\n            else:\n                o.connect(self, Edge(self))\n        return self\n\n    def __rshift__(self, other: Union[\"Node\", List[\"Node\"], \"Edge\"]):\n        \"\"\"Implements Self >> Node, Self >> [Nodes] and Self Edge.\"\"\"\n        if isinstance(other, list):\n            for node in other:\n                self.connect(node, Edge(self, forward=True))\n            return other\n        elif isinstance(other, Node):\n            return self.connect(other, Edge(self, forward=True))\n        else:\n            other.forward = True\n            other.node = self\n            return other\n\n    def __lshift__(self, other: Union[\"Node\", List[\"Node\"], \"Edge\"]):\n        \"\"\"Implements Self << Node, Self << [Nodes] and Self << Edge.\"\"\"\n        if isinstance(other, list):\n            for node in other:\n                self.connect(node, Edge(self, reverse=True))\n            return other\n        elif isinstance(other, Node):\n            return self.connect(other, Edge(self, reverse=True))\n        else:\n            other.reverse = True\n            return other.connect(self)\n\n    def __rrshift__(self, other: Union[List[\"Node\"], List[\"Edge\"]]):\n        \"\"\"Called for [Nodes] and [Edges] >> Self because list don't have __rshift__ operators.\"\"\"\n        for o in other:\n            if isinstance(o, Edge):\n                o.forward = True\n                o.connect(self)\n            else:\n                o.connect(self, Edge(self, forward=True))\n        return self\n\n    def __rlshift__(self, other: Union[List[\"Node\"], List[\"Edge\"]]):\n        \"\"\"Called for [Nodes] << Self because list of Nodes don't have __lshift__ operators.\"\"\"\n        for o in other:\n            if isinstance(o, Edge):\n                o.reverse = True\n                o.connect(self)\n            else:\n                o.connect(self, Edge(self, reverse=True))\n        return self\n\n    @property\n    def nodeid(self):\n        return self._id\n\n    # TODO: option for adding flow description to the connection edge\n    def connect(self, node: \"Node\", edge: \"Edge\"):\n        \"\"\"Connect to other node.\n\n        :param node: Other node instance.\n        :param edge: Type of the edge.\n        :return: Connected node.\n        \"\"\"\n        if not isinstance(node, Node):\n            ValueError(f\"{node} is not a valid Node\")\n        if not isinstance(edge, Edge):\n            ValueError(f\"{edge} is not a valid Edge\")\n        # An edge must be added on the global diagrams, not a cluster.\n        self._diagram.connect(self, node, edge)\n        return node\n\n    @staticmethod\n    def _rand_id():\n        return uuid.uuid4().hex\n\n    def _load_icon(self):\n        basedir = Path(os.path.abspath(os.path.dirname(__file__)))\n        return os.path.join(basedir.parent, self._icon_dir, self._icon)\n\n\nclass Edge:\n    \"\"\"Edge represents an edge between two nodes.\"\"\"\n\n    _default_edge_attrs = {\n        \"fontcolor\": \"#2D3436\",\n        \"fontname\": \"Sans-Serif\",\n        \"fontsize\": \"13\",\n    }\n\n    def __init__(\n        self,\n        node: \"Node\" = None,\n        forward: bool = False,\n        reverse: bool = False,\n        label: str = \"\",\n        color: str = \"\",\n        style: str = \"\",\n        **attrs: Dict,\n    ):\n        \"\"\"Edge represents an edge between two nodes.\n\n        :param node: Parent node.\n        :param forward: Points forward.\n        :param reverse: Points backward.\n        :param label: Edge label.\n        :param color: Edge color.\n        :param style: Edge style.\n        :param attrs: Other edge attributes\n        \"\"\"\n        if node is not None:\n            assert isinstance(node, Node)\n\n        self.node = node\n        self.forward = forward\n        self.reverse = reverse\n\n        self._attrs = {}\n\n        # Set attributes.\n        for k, v in self._default_edge_attrs.items():\n            self._attrs[k] = v\n\n        if label:\n            # Graphviz complaining about using label for edges, so replace it with xlabel.\n            # Update: xlabel option causes the misaligned label position:\n            # https://github.com/mingrammer/diagrams/issues/83\n            self._attrs[\"label\"] = label\n        if color:\n            self._attrs[\"color\"] = color\n        if style:\n            self._attrs[\"style\"] = style\n        self._attrs.update(attrs)\n\n    def __sub__(self, other: Union[\"Node\", \"Edge\", List[\"Node\"]]):\n        \"\"\"Implement Self - Node or Edge and Self - [Nodes]\"\"\"\n        return self.connect(other)\n\n    def __rsub__(self, other: Union[List[\"Node\"],\n                 List[\"Edge\"]]) -> List[\"Edge\"]:\n        \"\"\"Called for [Nodes] or [Edges] - Self because list don't have __sub__ operators.\"\"\"\n        return self.append(other)\n\n    def __rshift__(self, other: Union[\"Node\", \"Edge\", List[\"Node\"]]):\n        \"\"\"Implements Self >> Node or Edge and Self >> [Nodes].\"\"\"\n        self.forward = True\n        return self.connect(other)\n\n    def __lshift__(self, other: Union[\"Node\", \"Edge\", List[\"Node\"]]):\n        \"\"\"Implements Self << Node or Edge and Self << [Nodes].\"\"\"\n        self.reverse = True\n        return self.connect(other)\n\n    def __rrshift__(self,\n                    other: Union[List[\"Node\"],\n                                 List[\"Edge\"]]) -> List[\"Edge\"]:\n        \"\"\"Called for [Nodes] or [Edges] >> Self because list of Edges don't have __rshift__ operators.\"\"\"\n        return self.append(other, forward=True)\n\n    def __rlshift__(self,\n                    other: Union[List[\"Node\"],\n                                 List[\"Edge\"]]) -> List[\"Edge\"]:\n        \"\"\"Called for [Nodes] or [Edges] << Self because list of Edges don't have __lshift__ operators.\"\"\"\n        return self.append(other, reverse=True)\n\n    def append(self,\n               other: Union[List[\"Node\"],\n                            List[\"Edge\"]],\n               forward=None,\n               reverse=None) -> List[\"Edge\"]:\n        result = []\n        for o in other:\n            if isinstance(o, Edge):\n                o.forward = forward if forward else o.forward\n                o.reverse = reverse if reverse else o.reverse\n                self._attrs = o.attrs.copy()\n                result.append(o)\n            else:\n                result.append(\n                    Edge(\n                        o,\n                        forward=forward,\n                        reverse=reverse,\n                        **self._attrs))\n        return result\n\n    def connect(self, other: Union[\"Node\", \"Edge\", List[\"Node\"]]):\n        if isinstance(other, list):\n            for node in other:\n                self.node.connect(node, self)\n            return other\n        elif isinstance(other, Edge):\n            self._attrs = other._attrs.copy()\n            return self\n        else:\n            if self.node is not None:\n                return self.node.connect(other, self)\n            else:\n                self.node = other\n                return self\n\n    @property\n    def attrs(self) -> Dict:\n        if self.forward and self.reverse:\n            direction = \"both\"\n        elif self.forward:\n            direction = \"forward\"\n        elif self.reverse:\n            direction = \"back\"\n        else:\n            direction = \"none\"\n        return {**self._attrs, \"dir\": direction}\n\n\nGroup = Cluster\n"
  },
  {
    "path": "diagrams/alibabacloud/__init__.py",
    "content": "\"\"\"\nAlibabaCloud provides a set of services for Alibaba Cloud provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _AlibabaCloud(Node):\n    _provider = \"alibabacloud\"\n    _icon_dir = \"resources/alibabacloud\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass AlibabaCloud(_AlibabaCloud):\n    _icon = \"alibabacloud.png\"\n"
  },
  {
    "path": "diagrams/alibabacloud/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Analytics(_AlibabaCloud):\n    _type = \"analytics\"\n    _icon_dir = \"resources/alibabacloud/analytics\"\n\n\nclass AnalyticDb(_Analytics):\n    _icon = \"analytic-db.png\"\n\n\nclass ClickHouse(_Analytics):\n    _icon = \"click-house.png\"\n\n\nclass DataLakeAnalytics(_Analytics):\n    _icon = \"data-lake-analytics.png\"\n\n\nclass ElaticMapReduce(_Analytics):\n    _icon = \"elatic-map-reduce.png\"\n\n\nclass OpenSearch(_Analytics):\n    _icon = \"open-search.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/alibabacloud/application.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Application(_AlibabaCloud):\n    _type = \"application\"\n    _icon_dir = \"resources/alibabacloud/application\"\n\n\nclass ApiGateway(_Application):\n    _icon = \"api-gateway.png\"\n\n\nclass BeeBot(_Application):\n    _icon = \"bee-bot.png\"\n\n\nclass BlockchainAsAService(_Application):\n    _icon = \"blockchain-as-a-service.png\"\n\n\nclass CloudCallCenter(_Application):\n    _icon = \"cloud-call-center.png\"\n\n\nclass CodePipeline(_Application):\n    _icon = \"code-pipeline.png\"\n\n\nclass DirectMail(_Application):\n    _icon = \"direct-mail.png\"\n\n\nclass LogService(_Application):\n    _icon = \"log-service.png\"\n\n\nclass MessageNotificationService(_Application):\n    _icon = \"message-notification-service.png\"\n\n\nclass NodeJsPerformancePlatform(_Application):\n    _icon = \"node-js-performance-platform.png\"\n\n\nclass OpenSearch(_Application):\n    _icon = \"open-search.png\"\n\n\nclass PerformanceTestingService(_Application):\n    _icon = \"performance-testing-service.png\"\n\n\nclass RdCloud(_Application):\n    _icon = \"rd-cloud.png\"\n\n\nclass SmartConversationAnalysis(_Application):\n    _icon = \"smart-conversation-analysis.png\"\n\n\nclass Yida(_Application):\n    _icon = \"yida.png\"\n\n\n# Aliases\n\nSLS = LogService\nMNS = MessageNotificationService\nPTS = PerformanceTestingService\nSCA = SmartConversationAnalysis\n"
  },
  {
    "path": "diagrams/alibabacloud/communication.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Communication(_AlibabaCloud):\n    _type = \"communication\"\n    _icon_dir = \"resources/alibabacloud/communication\"\n\n\nclass DirectMail(_Communication):\n    _icon = \"direct-mail.png\"\n\n\nclass MobilePush(_Communication):\n    _icon = \"mobile-push.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/alibabacloud/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Compute(_AlibabaCloud):\n    _type = \"compute\"\n    _icon_dir = \"resources/alibabacloud/compute\"\n\n\nclass AutoScaling(_Compute):\n    _icon = \"auto-scaling.png\"\n\n\nclass BatchCompute(_Compute):\n    _icon = \"batch-compute.png\"\n\n\nclass ContainerRegistry(_Compute):\n    _icon = \"container-registry.png\"\n\n\nclass ContainerService(_Compute):\n    _icon = \"container-service.png\"\n\n\nclass ElasticComputeService(_Compute):\n    _icon = \"elastic-compute-service.png\"\n\n\nclass ElasticContainerInstance(_Compute):\n    _icon = \"elastic-container-instance.png\"\n\n\nclass ElasticHighPerformanceComputing(_Compute):\n    _icon = \"elastic-high-performance-computing.png\"\n\n\nclass ElasticSearch(_Compute):\n    _icon = \"elastic-search.png\"\n\n\nclass FunctionCompute(_Compute):\n    _icon = \"function-compute.png\"\n\n\nclass OperationOrchestrationService(_Compute):\n    _icon = \"operation-orchestration-service.png\"\n\n\nclass ResourceOrchestrationService(_Compute):\n    _icon = \"resource-orchestration-service.png\"\n\n\nclass ServerLoadBalancer(_Compute):\n    _icon = \"server-load-balancer.png\"\n\n\nclass ServerlessAppEngine(_Compute):\n    _icon = \"serverless-app-engine.png\"\n\n\nclass SimpleApplicationServer(_Compute):\n    _icon = \"simple-application-server.png\"\n\n\nclass WebAppService(_Compute):\n    _icon = \"web-app-service.png\"\n\n\n# Aliases\n\nESS = AutoScaling\nECS = ElasticComputeService\nECI = ElasticContainerInstance\nEHPC = ElasticHighPerformanceComputing\nFC = FunctionCompute\nOOS = OperationOrchestrationService\nROS = ResourceOrchestrationService\nSLB = ServerLoadBalancer\nSAE = ServerlessAppEngine\nSAS = SimpleApplicationServer\nWAS = WebAppService\n"
  },
  {
    "path": "diagrams/alibabacloud/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Database(_AlibabaCloud):\n    _type = \"database\"\n    _icon_dir = \"resources/alibabacloud/database\"\n\n\nclass ApsaradbCassandra(_Database):\n    _icon = \"apsaradb-cassandra.png\"\n\n\nclass ApsaradbHbase(_Database):\n    _icon = \"apsaradb-hbase.png\"\n\n\nclass ApsaradbMemcache(_Database):\n    _icon = \"apsaradb-memcache.png\"\n\n\nclass ApsaradbMongodb(_Database):\n    _icon = \"apsaradb-mongodb.png\"\n\n\nclass ApsaradbOceanbase(_Database):\n    _icon = \"apsaradb-oceanbase.png\"\n\n\nclass ApsaradbPolardb(_Database):\n    _icon = \"apsaradb-polardb.png\"\n\n\nclass ApsaradbPostgresql(_Database):\n    _icon = \"apsaradb-postgresql.png\"\n\n\nclass ApsaradbPpas(_Database):\n    _icon = \"apsaradb-ppas.png\"\n\n\nclass ApsaradbRedis(_Database):\n    _icon = \"apsaradb-redis.png\"\n\n\nclass ApsaradbSqlserver(_Database):\n    _icon = \"apsaradb-sqlserver.png\"\n\n\nclass DataManagementService(_Database):\n    _icon = \"data-management-service.png\"\n\n\nclass DataTransmissionService(_Database):\n    _icon = \"data-transmission-service.png\"\n\n\nclass DatabaseBackupService(_Database):\n    _icon = \"database-backup-service.png\"\n\n\nclass DisributeRelationalDatabaseService(_Database):\n    _icon = \"disribute-relational-database-service.png\"\n\n\nclass GraphDatabaseService(_Database):\n    _icon = \"graph-database-service.png\"\n\n\nclass HybriddbForMysql(_Database):\n    _icon = \"hybriddb-for-mysql.png\"\n\n\nclass RelationalDatabaseService(_Database):\n    _icon = \"relational-database-service.png\"\n\n\n# Aliases\n\nDMS = DataManagementService\nDTS = DataTransmissionService\nDBS = DatabaseBackupService\nDRDS = DisributeRelationalDatabaseService\nGDS = GraphDatabaseService\nRDS = RelationalDatabaseService\n"
  },
  {
    "path": "diagrams/alibabacloud/iot.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Iot(_AlibabaCloud):\n    _type = \"iot\"\n    _icon_dir = \"resources/alibabacloud/iot\"\n\n\nclass IotInternetDeviceId(_Iot):\n    _icon = \"iot-internet-device-id.png\"\n\n\nclass IotLinkWan(_Iot):\n    _icon = \"iot-link-wan.png\"\n\n\nclass IotMobileConnectionPackage(_Iot):\n    _icon = \"iot-mobile-connection-package.png\"\n\n\nclass IotPlatform(_Iot):\n    _icon = \"iot-platform.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/alibabacloud/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Network(_AlibabaCloud):\n    _type = \"network\"\n    _icon_dir = \"resources/alibabacloud/network\"\n\n\nclass Cdn(_Network):\n    _icon = \"cdn.png\"\n\n\nclass CloudEnterpriseNetwork(_Network):\n    _icon = \"cloud-enterprise-network.png\"\n\n\nclass ElasticIpAddress(_Network):\n    _icon = \"elastic-ip-address.png\"\n\n\nclass ExpressConnect(_Network):\n    _icon = \"express-connect.png\"\n\n\nclass NatGateway(_Network):\n    _icon = \"nat-gateway.png\"\n\n\nclass ServerLoadBalancer(_Network):\n    _icon = \"server-load-balancer.png\"\n\n\nclass SmartAccessGateway(_Network):\n    _icon = \"smart-access-gateway.png\"\n\n\nclass VirtualPrivateCloud(_Network):\n    _icon = \"virtual-private-cloud.png\"\n\n\nclass VpnGateway(_Network):\n    _icon = \"vpn-gateway.png\"\n\n\n# Aliases\n\nCEN = CloudEnterpriseNetwork\nEIP = ElasticIpAddress\nSLB = ServerLoadBalancer\nVPC = VirtualPrivateCloud\n"
  },
  {
    "path": "diagrams/alibabacloud/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Security(_AlibabaCloud):\n    _type = \"security\"\n    _icon_dir = \"resources/alibabacloud/security\"\n\n\nclass AntiBotService(_Security):\n    _icon = \"anti-bot-service.png\"\n\n\nclass AntiDdosBasic(_Security):\n    _icon = \"anti-ddos-basic.png\"\n\n\nclass AntiDdosPro(_Security):\n    _icon = \"anti-ddos-pro.png\"\n\n\nclass AntifraudService(_Security):\n    _icon = \"antifraud-service.png\"\n\n\nclass BastionHost(_Security):\n    _icon = \"bastion-host.png\"\n\n\nclass CloudFirewall(_Security):\n    _icon = \"cloud-firewall.png\"\n\n\nclass CloudSecurityScanner(_Security):\n    _icon = \"cloud-security-scanner.png\"\n\n\nclass ContentModeration(_Security):\n    _icon = \"content-moderation.png\"\n\n\nclass CrowdsourcedSecurityTesting(_Security):\n    _icon = \"crowdsourced-security-testing.png\"\n\n\nclass DataEncryptionService(_Security):\n    _icon = \"data-encryption-service.png\"\n\n\nclass DbAudit(_Security):\n    _icon = \"db-audit.png\"\n\n\nclass GameShield(_Security):\n    _icon = \"game-shield.png\"\n\n\nclass IdVerification(_Security):\n    _icon = \"id-verification.png\"\n\n\nclass ManagedSecurityService(_Security):\n    _icon = \"managed-security-service.png\"\n\n\nclass SecurityCenter(_Security):\n    _icon = \"security-center.png\"\n\n\nclass ServerGuard(_Security):\n    _icon = \"server-guard.png\"\n\n\nclass SslCertificates(_Security):\n    _icon = \"ssl-certificates.png\"\n\n\nclass WebApplicationFirewall(_Security):\n    _icon = \"web-application-firewall.png\"\n\n\n# Aliases\n\nABS = AntiBotService\nAS = AntifraudService\nCFW = CloudFirewall\nCM = ContentModeration\nDES = DataEncryptionService\nWAF = WebApplicationFirewall\n"
  },
  {
    "path": "diagrams/alibabacloud/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Storage(_AlibabaCloud):\n    _type = \"storage\"\n    _icon_dir = \"resources/alibabacloud/storage\"\n\n\nclass CloudStorageGateway(_Storage):\n    _icon = \"cloud-storage-gateway.png\"\n\n\nclass FileStorageHdfs(_Storage):\n    _icon = \"file-storage-hdfs.png\"\n\n\nclass FileStorageNas(_Storage):\n    _icon = \"file-storage-nas.png\"\n\n\nclass HybridBackupRecovery(_Storage):\n    _icon = \"hybrid-backup-recovery.png\"\n\n\nclass HybridCloudDisasterRecovery(_Storage):\n    _icon = \"hybrid-cloud-disaster-recovery.png\"\n\n\nclass Imm(_Storage):\n    _icon = \"imm.png\"\n\n\nclass ObjectStorageService(_Storage):\n    _icon = \"object-storage-service.png\"\n\n\nclass ObjectTableStore(_Storage):\n    _icon = \"object-table-store.png\"\n\n\n# Aliases\n\nHDFS = FileStorageHdfs\nNAS = FileStorageNas\nHBR = HybridBackupRecovery\nHDR = HybridCloudDisasterRecovery\nOSS = ObjectStorageService\nOTS = ObjectTableStore\n"
  },
  {
    "path": "diagrams/alibabacloud/web.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AlibabaCloud\n\n\nclass _Web(_AlibabaCloud):\n    _type = \"web\"\n    _icon_dir = \"resources/alibabacloud/web\"\n\n\nclass Dns(_Web):\n    _icon = \"dns.png\"\n\n\nclass Domain(_Web):\n    _icon = \"domain.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/__init__.py",
    "content": "\"\"\"\nAWS provides a set of services for Amazon Web Service provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _AWS(Node):\n    _provider = \"aws\"\n    _icon_dir = \"resources/aws\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass AWS(_AWS):\n    _icon = \"aws.png\"\n"
  },
  {
    "path": "diagrams/aws/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Analytics(_AWS):\n    _type = \"analytics\"\n    _icon_dir = \"resources/aws/analytics\"\n\n\nclass AmazonOpensearchService(_Analytics):\n    _icon = \"amazon-opensearch-service.png\"\n\n\nclass Analytics(_Analytics):\n    _icon = \"analytics.png\"\n\n\nclass Athena(_Analytics):\n    _icon = \"athena.png\"\n\n\nclass CloudsearchSearchDocuments(_Analytics):\n    _icon = \"cloudsearch-search-documents.png\"\n\n\nclass Cloudsearch(_Analytics):\n    _icon = \"cloudsearch.png\"\n\n\nclass DataLakeResource(_Analytics):\n    _icon = \"data-lake-resource.png\"\n\n\nclass DataPipeline(_Analytics):\n    _icon = \"data-pipeline.png\"\n\n\nclass ElasticsearchService(_Analytics):\n    _icon = \"elasticsearch-service.png\"\n\n\nclass EMRCluster(_Analytics):\n    _icon = \"emr-cluster.png\"\n\n\nclass EMREngineMaprM3(_Analytics):\n    _icon = \"emr-engine-mapr-m3.png\"\n\n\nclass EMREngineMaprM5(_Analytics):\n    _icon = \"emr-engine-mapr-m5.png\"\n\n\nclass EMREngineMaprM7(_Analytics):\n    _icon = \"emr-engine-mapr-m7.png\"\n\n\nclass EMREngine(_Analytics):\n    _icon = \"emr-engine.png\"\n\n\nclass EMRHdfsCluster(_Analytics):\n    _icon = \"emr-hdfs-cluster.png\"\n\n\nclass EMR(_Analytics):\n    _icon = \"emr.png\"\n\n\nclass GlueCrawlers(_Analytics):\n    _icon = \"glue-crawlers.png\"\n\n\nclass GlueDataCatalog(_Analytics):\n    _icon = \"glue-data-catalog.png\"\n\n\nclass Glue(_Analytics):\n    _icon = \"glue.png\"\n\n\nclass KinesisDataAnalytics(_Analytics):\n    _icon = \"kinesis-data-analytics.png\"\n\n\nclass KinesisDataFirehose(_Analytics):\n    _icon = \"kinesis-data-firehose.png\"\n\n\nclass KinesisDataStreams(_Analytics):\n    _icon = \"kinesis-data-streams.png\"\n\n\nclass KinesisVideoStreams(_Analytics):\n    _icon = \"kinesis-video-streams.png\"\n\n\nclass Kinesis(_Analytics):\n    _icon = \"kinesis.png\"\n\n\nclass LakeFormation(_Analytics):\n    _icon = \"lake-formation.png\"\n\n\nclass ManagedStreamingForKafka(_Analytics):\n    _icon = \"managed-streaming-for-kafka.png\"\n\n\nclass Quicksight(_Analytics):\n    _icon = \"quicksight.png\"\n\n\nclass RedshiftDenseComputeNode(_Analytics):\n    _icon = \"redshift-dense-compute-node.png\"\n\n\nclass RedshiftDenseStorageNode(_Analytics):\n    _icon = \"redshift-dense-storage-node.png\"\n\n\nclass Redshift(_Analytics):\n    _icon = \"redshift.png\"\n\n\n# Aliases\n\nES = ElasticsearchService\n"
  },
  {
    "path": "diagrams/aws/ar.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Ar(_AWS):\n    _type = \"ar\"\n    _icon_dir = \"resources/aws/ar\"\n\n\nclass ArVr(_Ar):\n    _icon = \"ar-vr.png\"\n\n\nclass Sumerian(_Ar):\n    _icon = \"sumerian.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/blockchain.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Blockchain(_AWS):\n    _type = \"blockchain\"\n    _icon_dir = \"resources/aws/blockchain\"\n\n\nclass BlockchainResource(_Blockchain):\n    _icon = \"blockchain-resource.png\"\n\n\nclass Blockchain(_Blockchain):\n    _icon = \"blockchain.png\"\n\n\nclass ManagedBlockchain(_Blockchain):\n    _icon = \"managed-blockchain.png\"\n\n\nclass QuantumLedgerDatabaseQldb(_Blockchain):\n    _icon = \"quantum-ledger-database-qldb.png\"\n\n\n# Aliases\n\nQLDB = QuantumLedgerDatabaseQldb\n"
  },
  {
    "path": "diagrams/aws/business.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Business(_AWS):\n    _type = \"business\"\n    _icon_dir = \"resources/aws/business\"\n\n\nclass AlexaForBusiness(_Business):\n    _icon = \"alexa-for-business.png\"\n\n\nclass BusinessApplications(_Business):\n    _icon = \"business-applications.png\"\n\n\nclass Chime(_Business):\n    _icon = \"chime.png\"\n\n\nclass Workmail(_Business):\n    _icon = \"workmail.png\"\n\n\n# Aliases\n\nA4B = AlexaForBusiness\n"
  },
  {
    "path": "diagrams/aws/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Compute(_AWS):\n    _type = \"compute\"\n    _icon_dir = \"resources/aws/compute\"\n\n\nclass AppRunner(_Compute):\n    _icon = \"app-runner.png\"\n\n\nclass ApplicationAutoScaling(_Compute):\n    _icon = \"application-auto-scaling.png\"\n\n\nclass Batch(_Compute):\n    _icon = \"batch.png\"\n\n\nclass ComputeOptimizer(_Compute):\n    _icon = \"compute-optimizer.png\"\n\n\nclass Compute(_Compute):\n    _icon = \"compute.png\"\n\n\nclass EC2Ami(_Compute):\n    _icon = \"ec2-ami.png\"\n\n\nclass EC2AutoScaling(_Compute):\n    _icon = \"ec2-auto-scaling.png\"\n\n\nclass EC2ContainerRegistryImage(_Compute):\n    _icon = \"ec2-container-registry-image.png\"\n\n\nclass EC2ContainerRegistryRegistry(_Compute):\n    _icon = \"ec2-container-registry-registry.png\"\n\n\nclass EC2ContainerRegistry(_Compute):\n    _icon = \"ec2-container-registry.png\"\n\n\nclass EC2ElasticIpAddress(_Compute):\n    _icon = \"ec2-elastic-ip-address.png\"\n\n\nclass EC2ImageBuilder(_Compute):\n    _icon = \"ec2-image-builder.png\"\n\n\nclass EC2Instance(_Compute):\n    _icon = \"ec2-instance.png\"\n\n\nclass EC2Instances(_Compute):\n    _icon = \"ec2-instances.png\"\n\n\nclass EC2Rescue(_Compute):\n    _icon = \"ec2-rescue.png\"\n\n\nclass EC2SpotInstance(_Compute):\n    _icon = \"ec2-spot-instance.png\"\n\n\nclass EC2(_Compute):\n    _icon = \"ec2.png\"\n\n\nclass ElasticBeanstalkApplication(_Compute):\n    _icon = \"elastic-beanstalk-application.png\"\n\n\nclass ElasticBeanstalkDeployment(_Compute):\n    _icon = \"elastic-beanstalk-deployment.png\"\n\n\nclass ElasticBeanstalk(_Compute):\n    _icon = \"elastic-beanstalk.png\"\n\n\nclass ElasticContainerServiceContainer(_Compute):\n    _icon = \"elastic-container-service-container.png\"\n\n\nclass ElasticContainerServiceServiceConnect(_Compute):\n    _icon = \"elastic-container-service-service-connect.png\"\n\n\nclass ElasticContainerServiceService(_Compute):\n    _icon = \"elastic-container-service-service.png\"\n\n\nclass ElasticContainerServiceTask(_Compute):\n    _icon = \"elastic-container-service-task.png\"\n\n\nclass ElasticContainerService(_Compute):\n    _icon = \"elastic-container-service.png\"\n\n\nclass ElasticKubernetesService(_Compute):\n    _icon = \"elastic-kubernetes-service.png\"\n\n\nclass Fargate(_Compute):\n    _icon = \"fargate.png\"\n\n\nclass LambdaFunction(_Compute):\n    _icon = \"lambda-function.png\"\n\n\nclass Lambda(_Compute):\n    _icon = \"lambda.png\"\n\n\nclass Lightsail(_Compute):\n    _icon = \"lightsail.png\"\n\n\nclass LocalZones(_Compute):\n    _icon = \"local-zones.png\"\n\n\nclass Outposts(_Compute):\n    _icon = \"outposts.png\"\n\n\nclass ServerlessApplicationRepository(_Compute):\n    _icon = \"serverless-application-repository.png\"\n\n\nclass ThinkboxDeadline(_Compute):\n    _icon = \"thinkbox-deadline.png\"\n\n\nclass ThinkboxDraft(_Compute):\n    _icon = \"thinkbox-draft.png\"\n\n\nclass ThinkboxFrost(_Compute):\n    _icon = \"thinkbox-frost.png\"\n\n\nclass ThinkboxKrakatoa(_Compute):\n    _icon = \"thinkbox-krakatoa.png\"\n\n\nclass ThinkboxSequoia(_Compute):\n    _icon = \"thinkbox-sequoia.png\"\n\n\nclass ThinkboxStoke(_Compute):\n    _icon = \"thinkbox-stoke.png\"\n\n\nclass ThinkboxXmesh(_Compute):\n    _icon = \"thinkbox-xmesh.png\"\n\n\nclass VmwareCloudOnAWS(_Compute):\n    _icon = \"vmware-cloud-on-aws.png\"\n\n\nclass Wavelength(_Compute):\n    _icon = \"wavelength.png\"\n\n\n# Aliases\n\nAutoScaling = ApplicationAutoScaling\nAMI = EC2Ami\nECR = EC2ContainerRegistry\nEB = ElasticBeanstalk\nECS = ElasticContainerService\nEKS = ElasticKubernetesService\nSAR = ServerlessApplicationRepository\n"
  },
  {
    "path": "diagrams/aws/cost.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Cost(_AWS):\n    _type = \"cost\"\n    _icon_dir = \"resources/aws/cost\"\n\n\nclass Budgets(_Cost):\n    _icon = \"budgets.png\"\n\n\nclass CostAndUsageReport(_Cost):\n    _icon = \"cost-and-usage-report.png\"\n\n\nclass CostExplorer(_Cost):\n    _icon = \"cost-explorer.png\"\n\n\nclass CostManagement(_Cost):\n    _icon = \"cost-management.png\"\n\n\nclass ReservedInstanceReporting(_Cost):\n    _icon = \"reserved-instance-reporting.png\"\n\n\nclass SavingsPlans(_Cost):\n    _icon = \"savings-plans.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Database(_AWS):\n    _type = \"database\"\n    _icon_dir = \"resources/aws/database\"\n\n\nclass AuroraInstance(_Database):\n    _icon = \"aurora-instance.png\"\n\n\nclass Aurora(_Database):\n    _icon = \"aurora.png\"\n\n\nclass DatabaseMigrationServiceDatabaseMigrationWorkflow(_Database):\n    _icon = \"database-migration-service-database-migration-workflow.png\"\n\n\nclass DatabaseMigrationService(_Database):\n    _icon = \"database-migration-service.png\"\n\n\nclass Database(_Database):\n    _icon = \"database.png\"\n\n\nclass DocumentdbMongodbCompatibility(_Database):\n    _icon = \"documentdb-mongodb-compatibility.png\"\n\n\nclass DynamodbAttribute(_Database):\n    _icon = \"dynamodb-attribute.png\"\n\n\nclass DynamodbAttributes(_Database):\n    _icon = \"dynamodb-attributes.png\"\n\n\nclass DynamodbDax(_Database):\n    _icon = \"dynamodb-dax.png\"\n\n\nclass DynamodbGlobalSecondaryIndex(_Database):\n    _icon = \"dynamodb-global-secondary-index.png\"\n\n\nclass DynamodbItem(_Database):\n    _icon = \"dynamodb-item.png\"\n\n\nclass DynamodbItems(_Database):\n    _icon = \"dynamodb-items.png\"\n\n\nclass DynamodbStreams(_Database):\n    _icon = \"dynamodb-streams.png\"\n\n\nclass DynamodbTable(_Database):\n    _icon = \"dynamodb-table.png\"\n\n\nclass Dynamodb(_Database):\n    _icon = \"dynamodb.png\"\n\n\nclass ElasticacheCacheNode(_Database):\n    _icon = \"elasticache-cache-node.png\"\n\n\nclass ElasticacheForMemcached(_Database):\n    _icon = \"elasticache-for-memcached.png\"\n\n\nclass ElasticacheForRedis(_Database):\n    _icon = \"elasticache-for-redis.png\"\n\n\nclass Elasticache(_Database):\n    _icon = \"elasticache.png\"\n\n\nclass KeyspacesManagedApacheCassandraService(_Database):\n    _icon = \"keyspaces-managed-apache-cassandra-service.png\"\n\n\nclass Neptune(_Database):\n    _icon = \"neptune.png\"\n\n\nclass QuantumLedgerDatabaseQldb(_Database):\n    _icon = \"quantum-ledger-database-qldb.png\"\n\n\nclass RDSInstance(_Database):\n    _icon = \"rds-instance.png\"\n\n\nclass RDSMariadbInstance(_Database):\n    _icon = \"rds-mariadb-instance.png\"\n\n\nclass RDSMysqlInstance(_Database):\n    _icon = \"rds-mysql-instance.png\"\n\n\nclass RDSOnVmware(_Database):\n    _icon = \"rds-on-vmware.png\"\n\n\nclass RDSOracleInstance(_Database):\n    _icon = \"rds-oracle-instance.png\"\n\n\nclass RDSPostgresqlInstance(_Database):\n    _icon = \"rds-postgresql-instance.png\"\n\n\nclass RDSSqlServerInstance(_Database):\n    _icon = \"rds-sql-server-instance.png\"\n\n\nclass RDS(_Database):\n    _icon = \"rds.png\"\n\n\nclass RedshiftDenseComputeNode(_Database):\n    _icon = \"redshift-dense-compute-node.png\"\n\n\nclass RedshiftDenseStorageNode(_Database):\n    _icon = \"redshift-dense-storage-node.png\"\n\n\nclass Redshift(_Database):\n    _icon = \"redshift.png\"\n\n\nclass Timestream(_Database):\n    _icon = \"timestream.png\"\n\n\n# Aliases\n\nDMS = DatabaseMigrationService\nDocumentDB = DocumentdbMongodbCompatibility\nDAX = DynamodbDax\nDynamodbGSI = DynamodbGlobalSecondaryIndex\nDB = Database\nDDB = Dynamodb\nElastiCache = Elasticache\nQLDB = QuantumLedgerDatabaseQldb\n"
  },
  {
    "path": "diagrams/aws/devtools.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Devtools(_AWS):\n    _type = \"devtools\"\n    _icon_dir = \"resources/aws/devtools\"\n\n\nclass CloudDevelopmentKit(_Devtools):\n    _icon = \"cloud-development-kit.png\"\n\n\nclass Cloud9Resource(_Devtools):\n    _icon = \"cloud9-resource.png\"\n\n\nclass Cloud9(_Devtools):\n    _icon = \"cloud9.png\"\n\n\nclass Cloudshell(_Devtools):\n    _icon = \"cloudshell.png\"\n\n\nclass Codeartifact(_Devtools):\n    _icon = \"codeartifact.png\"\n\n\nclass Codebuild(_Devtools):\n    _icon = \"codebuild.png\"\n\n\nclass Codecommit(_Devtools):\n    _icon = \"codecommit.png\"\n\n\nclass Codedeploy(_Devtools):\n    _icon = \"codedeploy.png\"\n\n\nclass Codepipeline(_Devtools):\n    _icon = \"codepipeline.png\"\n\n\nclass Codestar(_Devtools):\n    _icon = \"codestar.png\"\n\n\nclass CommandLineInterface(_Devtools):\n    _icon = \"command-line-interface.png\"\n\n\nclass DeveloperTools(_Devtools):\n    _icon = \"developer-tools.png\"\n\n\nclass ToolsAndSdks(_Devtools):\n    _icon = \"tools-and-sdks.png\"\n\n\nclass XRay(_Devtools):\n    _icon = \"x-ray.png\"\n\n\n# Aliases\n\nCLI = CommandLineInterface\nDevTools = DeveloperTools\n"
  },
  {
    "path": "diagrams/aws/enablement.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Enablement(_AWS):\n    _type = \"enablement\"\n    _icon_dir = \"resources/aws/enablement\"\n\n\nclass CustomerEnablement(_Enablement):\n    _icon = \"customer-enablement.png\"\n\n\nclass Iq(_Enablement):\n    _icon = \"iq.png\"\n\n\nclass ManagedServices(_Enablement):\n    _icon = \"managed-services.png\"\n\n\nclass ProfessionalServices(_Enablement):\n    _icon = \"professional-services.png\"\n\n\nclass Support(_Enablement):\n    _icon = \"support.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/enduser.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Enduser(_AWS):\n    _type = \"enduser\"\n    _icon_dir = \"resources/aws/enduser\"\n\n\nclass Appstream20(_Enduser):\n    _icon = \"appstream-2-0.png\"\n\n\nclass DesktopAndAppStreaming(_Enduser):\n    _icon = \"desktop-and-app-streaming.png\"\n\n\nclass Workdocs(_Enduser):\n    _icon = \"workdocs.png\"\n\n\nclass Worklink(_Enduser):\n    _icon = \"worklink.png\"\n\n\nclass Workspaces(_Enduser):\n    _icon = \"workspaces.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/engagement.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Engagement(_AWS):\n    _type = \"engagement\"\n    _icon_dir = \"resources/aws/engagement\"\n\n\nclass Connect(_Engagement):\n    _icon = \"connect.png\"\n\n\nclass CustomerEngagement(_Engagement):\n    _icon = \"customer-engagement.png\"\n\n\nclass Pinpoint(_Engagement):\n    _icon = \"pinpoint.png\"\n\n\nclass SimpleEmailServiceSesEmail(_Engagement):\n    _icon = \"simple-email-service-ses-email.png\"\n\n\nclass SimpleEmailServiceSes(_Engagement):\n    _icon = \"simple-email-service-ses.png\"\n\n\n# Aliases\n\nSES = SimpleEmailServiceSes\n"
  },
  {
    "path": "diagrams/aws/game.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Game(_AWS):\n    _type = \"game\"\n    _icon_dir = \"resources/aws/game\"\n\n\nclass GameTech(_Game):\n    _icon = \"game-tech.png\"\n\n\nclass Gamelift(_Game):\n    _icon = \"gamelift.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/general.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _General(_AWS):\n    _type = \"general\"\n    _icon_dir = \"resources/aws/general\"\n\n\nclass Client(_General):\n    _icon = \"client.png\"\n\n\nclass Disk(_General):\n    _icon = \"disk.png\"\n\n\nclass Forums(_General):\n    _icon = \"forums.png\"\n\n\nclass General(_General):\n    _icon = \"general.png\"\n\n\nclass GenericDatabase(_General):\n    _icon = \"generic-database.png\"\n\n\nclass GenericFirewall(_General):\n    _icon = \"generic-firewall.png\"\n\n\nclass GenericOfficeBuilding(_General):\n    _icon = \"generic-office-building.png\"\n\n\nclass GenericSamlToken(_General):\n    _icon = \"generic-saml-token.png\"\n\n\nclass GenericSDK(_General):\n    _icon = \"generic-sdk.png\"\n\n\nclass InternetAlt1(_General):\n    _icon = \"internet-alt1.png\"\n\n\nclass InternetAlt2(_General):\n    _icon = \"internet-alt2.png\"\n\n\nclass InternetGateway(_General):\n    _icon = \"internet-gateway.png\"\n\n\nclass Marketplace(_General):\n    _icon = \"marketplace.png\"\n\n\nclass MobileClient(_General):\n    _icon = \"mobile-client.png\"\n\n\nclass Multimedia(_General):\n    _icon = \"multimedia.png\"\n\n\nclass OfficeBuilding(_General):\n    _icon = \"office-building.png\"\n\n\nclass SamlToken(_General):\n    _icon = \"saml-token.png\"\n\n\nclass SDK(_General):\n    _icon = \"sdk.png\"\n\n\nclass SslPadlock(_General):\n    _icon = \"ssl-padlock.png\"\n\n\nclass TapeStorage(_General):\n    _icon = \"tape-storage.png\"\n\n\nclass Toolkit(_General):\n    _icon = \"toolkit.png\"\n\n\nclass TraditionalServer(_General):\n    _icon = \"traditional-server.png\"\n\n\nclass User(_General):\n    _icon = \"user.png\"\n\n\nclass Users(_General):\n    _icon = \"users.png\"\n\n\n# Aliases\n\nOfficeBuilding = GenericOfficeBuilding\n"
  },
  {
    "path": "diagrams/aws/integration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Integration(_AWS):\n    _type = \"integration\"\n    _icon_dir = \"resources/aws/integration\"\n\n\nclass ApplicationIntegration(_Integration):\n    _icon = \"application-integration.png\"\n\n\nclass Appsync(_Integration):\n    _icon = \"appsync.png\"\n\n\nclass ConsoleMobileApplication(_Integration):\n    _icon = \"console-mobile-application.png\"\n\n\nclass EventResource(_Integration):\n    _icon = \"event-resource.png\"\n\n\nclass EventbridgeCustomEventBusResource(_Integration):\n    _icon = \"eventbridge-custom-event-bus-resource.png\"\n\n\nclass EventbridgeDefaultEventBusResource(_Integration):\n    _icon = \"eventbridge-default-event-bus-resource.png\"\n\n\nclass EventbridgeEvent(_Integration):\n    _icon = \"eventbridge-event.png\"\n\n\nclass EventbridgePipes(_Integration):\n    _icon = \"eventbridge-pipes.png\"\n\n\nclass EventbridgeRule(_Integration):\n    _icon = \"eventbridge-rule.png\"\n\n\nclass EventbridgeSaasPartnerEventBusResource(_Integration):\n    _icon = \"eventbridge-saas-partner-event-bus-resource.png\"\n\n\nclass EventbridgeScheduler(_Integration):\n    _icon = \"eventbridge-scheduler.png\"\n\n\nclass EventbridgeSchema(_Integration):\n    _icon = \"eventbridge-schema.png\"\n\n\nclass Eventbridge(_Integration):\n    _icon = \"eventbridge.png\"\n\n\nclass ExpressWorkflows(_Integration):\n    _icon = \"express-workflows.png\"\n\n\nclass MQ(_Integration):\n    _icon = \"mq.png\"\n\n\nclass SimpleNotificationServiceSnsEmailNotification(_Integration):\n    _icon = \"simple-notification-service-sns-email-notification.png\"\n\n\nclass SimpleNotificationServiceSnsHttpNotification(_Integration):\n    _icon = \"simple-notification-service-sns-http-notification.png\"\n\n\nclass SimpleNotificationServiceSnsTopic(_Integration):\n    _icon = \"simple-notification-service-sns-topic.png\"\n\n\nclass SimpleNotificationServiceSns(_Integration):\n    _icon = \"simple-notification-service-sns.png\"\n\n\nclass SimpleQueueServiceSqsMessage(_Integration):\n    _icon = \"simple-queue-service-sqs-message.png\"\n\n\nclass SimpleQueueServiceSqsQueue(_Integration):\n    _icon = \"simple-queue-service-sqs-queue.png\"\n\n\nclass SimpleQueueServiceSqs(_Integration):\n    _icon = \"simple-queue-service-sqs.png\"\n\n\nclass StepFunctions(_Integration):\n    _icon = \"step-functions.png\"\n\n\n# Aliases\n\nSNS = SimpleNotificationServiceSns\nSQS = SimpleQueueServiceSqs\nSF = StepFunctions\n"
  },
  {
    "path": "diagrams/aws/iot.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Iot(_AWS):\n    _type = \"iot\"\n    _icon_dir = \"resources/aws/iot\"\n\n\nclass Freertos(_Iot):\n    _icon = \"freertos.png\"\n\n\nclass InternetOfThings(_Iot):\n    _icon = \"internet-of-things.png\"\n\n\nclass Iot1Click(_Iot):\n    _icon = \"iot-1-click.png\"\n\n\nclass IotAction(_Iot):\n    _icon = \"iot-action.png\"\n\n\nclass IotActuator(_Iot):\n    _icon = \"iot-actuator.png\"\n\n\nclass IotAlexaEcho(_Iot):\n    _icon = \"iot-alexa-echo.png\"\n\n\nclass IotAlexaEnabledDevice(_Iot):\n    _icon = \"iot-alexa-enabled-device.png\"\n\n\nclass IotAlexaSkill(_Iot):\n    _icon = \"iot-alexa-skill.png\"\n\n\nclass IotAlexaVoiceService(_Iot):\n    _icon = \"iot-alexa-voice-service.png\"\n\n\nclass IotAnalyticsChannel(_Iot):\n    _icon = \"iot-analytics-channel.png\"\n\n\nclass IotAnalyticsDataSet(_Iot):\n    _icon = \"iot-analytics-data-set.png\"\n\n\nclass IotAnalyticsDataStore(_Iot):\n    _icon = \"iot-analytics-data-store.png\"\n\n\nclass IotAnalyticsNotebook(_Iot):\n    _icon = \"iot-analytics-notebook.png\"\n\n\nclass IotAnalyticsPipeline(_Iot):\n    _icon = \"iot-analytics-pipeline.png\"\n\n\nclass IotAnalytics(_Iot):\n    _icon = \"iot-analytics.png\"\n\n\nclass IotBank(_Iot):\n    _icon = \"iot-bank.png\"\n\n\nclass IotBicycle(_Iot):\n    _icon = \"iot-bicycle.png\"\n\n\nclass IotButton(_Iot):\n    _icon = \"iot-button.png\"\n\n\nclass IotCamera(_Iot):\n    _icon = \"iot-camera.png\"\n\n\nclass IotCar(_Iot):\n    _icon = \"iot-car.png\"\n\n\nclass IotCart(_Iot):\n    _icon = \"iot-cart.png\"\n\n\nclass IotCertificate(_Iot):\n    _icon = \"iot-certificate.png\"\n\n\nclass IotCoffeePot(_Iot):\n    _icon = \"iot-coffee-pot.png\"\n\n\nclass IotCore(_Iot):\n    _icon = \"iot-core.png\"\n\n\nclass IotDesiredState(_Iot):\n    _icon = \"iot-desired-state.png\"\n\n\nclass IotDeviceDefender(_Iot):\n    _icon = \"iot-device-defender.png\"\n\n\nclass IotDeviceGateway(_Iot):\n    _icon = \"iot-device-gateway.png\"\n\n\nclass IotDeviceManagement(_Iot):\n    _icon = \"iot-device-management.png\"\n\n\nclass IotDoorLock(_Iot):\n    _icon = \"iot-door-lock.png\"\n\n\nclass IotEvents(_Iot):\n    _icon = \"iot-events.png\"\n\n\nclass IotFactory(_Iot):\n    _icon = \"iot-factory.png\"\n\n\nclass IotFireTvStick(_Iot):\n    _icon = \"iot-fire-tv-stick.png\"\n\n\nclass IotFireTv(_Iot):\n    _icon = \"iot-fire-tv.png\"\n\n\nclass IotGeneric(_Iot):\n    _icon = \"iot-generic.png\"\n\n\nclass IotGreengrassConnector(_Iot):\n    _icon = \"iot-greengrass-connector.png\"\n\n\nclass IotGreengrass(_Iot):\n    _icon = \"iot-greengrass.png\"\n\n\nclass IotHardwareBoard(_Iot):\n    _icon = \"iot-hardware-board.png\"\n\n\nclass IotHouse(_Iot):\n    _icon = \"iot-house.png\"\n\n\nclass IotHttp(_Iot):\n    _icon = \"iot-http.png\"\n\n\nclass IotHttp2(_Iot):\n    _icon = \"iot-http2.png\"\n\n\nclass IotJobs(_Iot):\n    _icon = \"iot-jobs.png\"\n\n\nclass IotLambda(_Iot):\n    _icon = \"iot-lambda.png\"\n\n\nclass IotLightbulb(_Iot):\n    _icon = \"iot-lightbulb.png\"\n\n\nclass IotMedicalEmergency(_Iot):\n    _icon = \"iot-medical-emergency.png\"\n\n\nclass IotMqtt(_Iot):\n    _icon = \"iot-mqtt.png\"\n\n\nclass IotOverTheAirUpdate(_Iot):\n    _icon = \"iot-over-the-air-update.png\"\n\n\nclass IotPolicyEmergency(_Iot):\n    _icon = \"iot-policy-emergency.png\"\n\n\nclass IotPolicy(_Iot):\n    _icon = \"iot-policy.png\"\n\n\nclass IotReportedState(_Iot):\n    _icon = \"iot-reported-state.png\"\n\n\nclass IotRule(_Iot):\n    _icon = \"iot-rule.png\"\n\n\nclass IotSensor(_Iot):\n    _icon = \"iot-sensor.png\"\n\n\nclass IotServo(_Iot):\n    _icon = \"iot-servo.png\"\n\n\nclass IotShadow(_Iot):\n    _icon = \"iot-shadow.png\"\n\n\nclass IotSimulator(_Iot):\n    _icon = \"iot-simulator.png\"\n\n\nclass IotSitewise(_Iot):\n    _icon = \"iot-sitewise.png\"\n\n\nclass IotThermostat(_Iot):\n    _icon = \"iot-thermostat.png\"\n\n\nclass IotThingsGraph(_Iot):\n    _icon = \"iot-things-graph.png\"\n\n\nclass IotTopic(_Iot):\n    _icon = \"iot-topic.png\"\n\n\nclass IotTravel(_Iot):\n    _icon = \"iot-travel.png\"\n\n\nclass IotUtility(_Iot):\n    _icon = \"iot-utility.png\"\n\n\nclass IotWindfarm(_Iot):\n    _icon = \"iot-windfarm.png\"\n\n\n# Aliases\n\nFreeRTOS = Freertos\nIotBoard = IotHardwareBoard\n"
  },
  {
    "path": "diagrams/aws/management.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Management(_AWS):\n    _type = \"management\"\n    _icon_dir = \"resources/aws/management\"\n\n\nclass AmazonDevopsGuru(_Management):\n    _icon = \"amazon-devops-guru.png\"\n\n\nclass AmazonManagedGrafana(_Management):\n    _icon = \"amazon-managed-grafana.png\"\n\n\nclass AmazonManagedPrometheus(_Management):\n    _icon = \"amazon-managed-prometheus.png\"\n\n\nclass AmazonManagedWorkflowsApacheAirflow(_Management):\n    _icon = \"amazon-managed-workflows-apache-airflow.png\"\n\n\nclass AutoScaling(_Management):\n    _icon = \"auto-scaling.png\"\n\n\nclass Chatbot(_Management):\n    _icon = \"chatbot.png\"\n\n\nclass CloudformationChangeSet(_Management):\n    _icon = \"cloudformation-change-set.png\"\n\n\nclass CloudformationStack(_Management):\n    _icon = \"cloudformation-stack.png\"\n\n\nclass CloudformationTemplate(_Management):\n    _icon = \"cloudformation-template.png\"\n\n\nclass Cloudformation(_Management):\n    _icon = \"cloudformation.png\"\n\n\nclass Cloudtrail(_Management):\n    _icon = \"cloudtrail.png\"\n\n\nclass CloudwatchAlarm(_Management):\n    _icon = \"cloudwatch-alarm.png\"\n\n\nclass CloudwatchEventEventBased(_Management):\n    _icon = \"cloudwatch-event-event-based.png\"\n\n\nclass CloudwatchEventTimeBased(_Management):\n    _icon = \"cloudwatch-event-time-based.png\"\n\n\nclass CloudwatchLogs(_Management):\n    _icon = \"cloudwatch-logs.png\"\n\n\nclass CloudwatchRule(_Management):\n    _icon = \"cloudwatch-rule.png\"\n\n\nclass Cloudwatch(_Management):\n    _icon = \"cloudwatch.png\"\n\n\nclass Codeguru(_Management):\n    _icon = \"codeguru.png\"\n\n\nclass CommandLineInterface(_Management):\n    _icon = \"command-line-interface.png\"\n\n\nclass Config(_Management):\n    _icon = \"config.png\"\n\n\nclass ControlTower(_Management):\n    _icon = \"control-tower.png\"\n\n\nclass LicenseManager(_Management):\n    _icon = \"license-manager.png\"\n\n\nclass ManagedServices(_Management):\n    _icon = \"managed-services.png\"\n\n\nclass ManagementAndGovernance(_Management):\n    _icon = \"management-and-governance.png\"\n\n\nclass ManagementConsole(_Management):\n    _icon = \"management-console.png\"\n\n\nclass OpsworksApps(_Management):\n    _icon = \"opsworks-apps.png\"\n\n\nclass OpsworksDeployments(_Management):\n    _icon = \"opsworks-deployments.png\"\n\n\nclass OpsworksInstances(_Management):\n    _icon = \"opsworks-instances.png\"\n\n\nclass OpsworksLayers(_Management):\n    _icon = \"opsworks-layers.png\"\n\n\nclass OpsworksMonitoring(_Management):\n    _icon = \"opsworks-monitoring.png\"\n\n\nclass OpsworksPermissions(_Management):\n    _icon = \"opsworks-permissions.png\"\n\n\nclass OpsworksResources(_Management):\n    _icon = \"opsworks-resources.png\"\n\n\nclass OpsworksStack(_Management):\n    _icon = \"opsworks-stack.png\"\n\n\nclass Opsworks(_Management):\n    _icon = \"opsworks.png\"\n\n\nclass OrganizationsAccount(_Management):\n    _icon = \"organizations-account.png\"\n\n\nclass OrganizationsOrganizationalUnit(_Management):\n    _icon = \"organizations-organizational-unit.png\"\n\n\nclass Organizations(_Management):\n    _icon = \"organizations.png\"\n\n\nclass PersonalHealthDashboard(_Management):\n    _icon = \"personal-health-dashboard.png\"\n\n\nclass Proton(_Management):\n    _icon = \"proton.png\"\n\n\nclass ServiceCatalog(_Management):\n    _icon = \"service-catalog.png\"\n\n\nclass SystemsManagerAppConfig(_Management):\n    _icon = \"systems-manager-app-config.png\"\n\n\nclass SystemsManagerAutomation(_Management):\n    _icon = \"systems-manager-automation.png\"\n\n\nclass SystemsManagerDocuments(_Management):\n    _icon = \"systems-manager-documents.png\"\n\n\nclass SystemsManagerInventory(_Management):\n    _icon = \"systems-manager-inventory.png\"\n\n\nclass SystemsManagerMaintenanceWindows(_Management):\n    _icon = \"systems-manager-maintenance-windows.png\"\n\n\nclass SystemsManagerOpscenter(_Management):\n    _icon = \"systems-manager-opscenter.png\"\n\n\nclass SystemsManagerParameterStore(_Management):\n    _icon = \"systems-manager-parameter-store.png\"\n\n\nclass SystemsManagerPatchManager(_Management):\n    _icon = \"systems-manager-patch-manager.png\"\n\n\nclass SystemsManagerRunCommand(_Management):\n    _icon = \"systems-manager-run-command.png\"\n\n\nclass SystemsManagerStateManager(_Management):\n    _icon = \"systems-manager-state-manager.png\"\n\n\nclass SystemsManager(_Management):\n    _icon = \"systems-manager.png\"\n\n\nclass TrustedAdvisorChecklistCost(_Management):\n    _icon = \"trusted-advisor-checklist-cost.png\"\n\n\nclass TrustedAdvisorChecklistFaultTolerant(_Management):\n    _icon = \"trusted-advisor-checklist-fault-tolerant.png\"\n\n\nclass TrustedAdvisorChecklistPerformance(_Management):\n    _icon = \"trusted-advisor-checklist-performance.png\"\n\n\nclass TrustedAdvisorChecklistSecurity(_Management):\n    _icon = \"trusted-advisor-checklist-security.png\"\n\n\nclass TrustedAdvisorChecklist(_Management):\n    _icon = \"trusted-advisor-checklist.png\"\n\n\nclass TrustedAdvisor(_Management):\n    _icon = \"trusted-advisor.png\"\n\n\nclass UserNotifications(_Management):\n    _icon = \"user-notifications.png\"\n\n\nclass WellArchitectedTool(_Management):\n    _icon = \"well-architected-tool.png\"\n\n\n# Aliases\n\nSSM = SystemsManager\nParameterStore = SystemsManagerParameterStore\n"
  },
  {
    "path": "diagrams/aws/media.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Media(_AWS):\n    _type = \"media\"\n    _icon_dir = \"resources/aws/media\"\n\n\nclass ElasticTranscoder(_Media):\n    _icon = \"elastic-transcoder.png\"\n\n\nclass ElementalConductor(_Media):\n    _icon = \"elemental-conductor.png\"\n\n\nclass ElementalDelta(_Media):\n    _icon = \"elemental-delta.png\"\n\n\nclass ElementalLive(_Media):\n    _icon = \"elemental-live.png\"\n\n\nclass ElementalMediaconnect(_Media):\n    _icon = \"elemental-mediaconnect.png\"\n\n\nclass ElementalMediaconvert(_Media):\n    _icon = \"elemental-mediaconvert.png\"\n\n\nclass ElementalMedialive(_Media):\n    _icon = \"elemental-medialive.png\"\n\n\nclass ElementalMediapackage(_Media):\n    _icon = \"elemental-mediapackage.png\"\n\n\nclass ElementalMediastore(_Media):\n    _icon = \"elemental-mediastore.png\"\n\n\nclass ElementalMediatailor(_Media):\n    _icon = \"elemental-mediatailor.png\"\n\n\nclass ElementalServer(_Media):\n    _icon = \"elemental-server.png\"\n\n\nclass KinesisVideoStreams(_Media):\n    _icon = \"kinesis-video-streams.png\"\n\n\nclass MediaServices(_Media):\n    _icon = \"media-services.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/migration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Migration(_AWS):\n    _type = \"migration\"\n    _icon_dir = \"resources/aws/migration\"\n\n\nclass ApplicationDiscoveryService(_Migration):\n    _icon = \"application-discovery-service.png\"\n\n\nclass CloudendureMigration(_Migration):\n    _icon = \"cloudendure-migration.png\"\n\n\nclass DatabaseMigrationService(_Migration):\n    _icon = \"database-migration-service.png\"\n\n\nclass DatasyncAgent(_Migration):\n    _icon = \"datasync-agent.png\"\n\n\nclass Datasync(_Migration):\n    _icon = \"datasync.png\"\n\n\nclass MigrationAndTransfer(_Migration):\n    _icon = \"migration-and-transfer.png\"\n\n\nclass MigrationHub(_Migration):\n    _icon = \"migration-hub.png\"\n\n\nclass ServerMigrationService(_Migration):\n    _icon = \"server-migration-service.png\"\n\n\nclass SnowballEdge(_Migration):\n    _icon = \"snowball-edge.png\"\n\n\nclass Snowball(_Migration):\n    _icon = \"snowball.png\"\n\n\nclass Snowmobile(_Migration):\n    _icon = \"snowmobile.png\"\n\n\nclass TransferForSftp(_Migration):\n    _icon = \"transfer-for-sftp.png\"\n\n\n# Aliases\n\nADS = ApplicationDiscoveryService\nCEM = CloudendureMigration\nDMS = DatabaseMigrationService\nMAT = MigrationAndTransfer\nSMS = ServerMigrationService\n"
  },
  {
    "path": "diagrams/aws/ml.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _ML(_AWS):\n    _type = \"ml\"\n    _icon_dir = \"resources/aws/ml\"\n\n\nclass ApacheMxnetOnAWS(_ML):\n    _icon = \"apache-mxnet-on-aws.png\"\n\n\nclass AugmentedAi(_ML):\n    _icon = \"augmented-ai.png\"\n\n\nclass Bedrock(_ML):\n    _icon = \"bedrock.png\"\n\n\nclass Comprehend(_ML):\n    _icon = \"comprehend.png\"\n\n\nclass DeepLearningAmis(_ML):\n    _icon = \"deep-learning-amis.png\"\n\n\nclass DeepLearningContainers(_ML):\n    _icon = \"deep-learning-containers.png\"\n\n\nclass Deepcomposer(_ML):\n    _icon = \"deepcomposer.png\"\n\n\nclass Deeplens(_ML):\n    _icon = \"deeplens.png\"\n\n\nclass Deepracer(_ML):\n    _icon = \"deepracer.png\"\n\n\nclass ElasticInference(_ML):\n    _icon = \"elastic-inference.png\"\n\n\nclass Forecast(_ML):\n    _icon = \"forecast.png\"\n\n\nclass FraudDetector(_ML):\n    _icon = \"fraud-detector.png\"\n\n\nclass Kendra(_ML):\n    _icon = \"kendra.png\"\n\n\nclass Lex(_ML):\n    _icon = \"lex.png\"\n\n\nclass MachineLearning(_ML):\n    _icon = \"machine-learning.png\"\n\n\nclass Personalize(_ML):\n    _icon = \"personalize.png\"\n\n\nclass Polly(_ML):\n    _icon = \"polly.png\"\n\n\nclass Q(_ML):\n    _icon = \"q.png\"\n\n\nclass RekognitionImage(_ML):\n    _icon = \"rekognition-image.png\"\n\n\nclass RekognitionVideo(_ML):\n    _icon = \"rekognition-video.png\"\n\n\nclass Rekognition(_ML):\n    _icon = \"rekognition.png\"\n\n\nclass SagemakerGroundTruth(_ML):\n    _icon = \"sagemaker-ground-truth.png\"\n\n\nclass SagemakerModel(_ML):\n    _icon = \"sagemaker-model.png\"\n\n\nclass SagemakerNotebook(_ML):\n    _icon = \"sagemaker-notebook.png\"\n\n\nclass SagemakerTrainingJob(_ML):\n    _icon = \"sagemaker-training-job.png\"\n\n\nclass Sagemaker(_ML):\n    _icon = \"sagemaker.png\"\n\n\nclass TensorflowOnAWS(_ML):\n    _icon = \"tensorflow-on-aws.png\"\n\n\nclass Textract(_ML):\n    _icon = \"textract.png\"\n\n\nclass Transcribe(_ML):\n    _icon = \"transcribe.png\"\n\n\nclass Transform(_ML):\n    _icon = \"transform.png\"\n\n\nclass Translate(_ML):\n    _icon = \"translate.png\"\n\n\n# Aliases\n\nDLC = DeepLearningContainers\n"
  },
  {
    "path": "diagrams/aws/mobile.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Mobile(_AWS):\n    _type = \"mobile\"\n    _icon_dir = \"resources/aws/mobile\"\n\n\nclass Amplify(_Mobile):\n    _icon = \"amplify.png\"\n\n\nclass APIGatewayEndpoint(_Mobile):\n    _icon = \"api-gateway-endpoint.png\"\n\n\nclass APIGateway(_Mobile):\n    _icon = \"api-gateway.png\"\n\n\nclass Appsync(_Mobile):\n    _icon = \"appsync.png\"\n\n\nclass DeviceFarm(_Mobile):\n    _icon = \"device-farm.png\"\n\n\nclass Mobile(_Mobile):\n    _icon = \"mobile.png\"\n\n\nclass Pinpoint(_Mobile):\n    _icon = \"pinpoint.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Network(_AWS):\n    _type = \"network\"\n    _icon_dir = \"resources/aws/network\"\n\n\nclass APIGatewayEndpoint(_Network):\n    _icon = \"api-gateway-endpoint.png\"\n\n\nclass APIGateway(_Network):\n    _icon = \"api-gateway.png\"\n\n\nclass AppMesh(_Network):\n    _icon = \"app-mesh.png\"\n\n\nclass ClientVpn(_Network):\n    _icon = \"client-vpn.png\"\n\n\nclass CloudMap(_Network):\n    _icon = \"cloud-map.png\"\n\n\nclass CloudFrontDownloadDistribution(_Network):\n    _icon = \"cloudfront-download-distribution.png\"\n\n\nclass CloudFrontEdgeLocation(_Network):\n    _icon = \"cloudfront-edge-location.png\"\n\n\nclass CloudFrontStreamingDistribution(_Network):\n    _icon = \"cloudfront-streaming-distribution.png\"\n\n\nclass CloudFront(_Network):\n    _icon = \"cloudfront.png\"\n\n\nclass DirectConnect(_Network):\n    _icon = \"direct-connect.png\"\n\n\nclass ElasticLoadBalancing(_Network):\n    _icon = \"elastic-load-balancing.png\"\n\n\nclass ElbApplicationLoadBalancer(_Network):\n    _icon = \"elb-application-load-balancer.png\"\n\n\nclass ElbClassicLoadBalancer(_Network):\n    _icon = \"elb-classic-load-balancer.png\"\n\n\nclass ElbNetworkLoadBalancer(_Network):\n    _icon = \"elb-network-load-balancer.png\"\n\n\nclass Endpoint(_Network):\n    _icon = \"endpoint.png\"\n\n\nclass GlobalAccelerator(_Network):\n    _icon = \"global-accelerator.png\"\n\n\nclass InternetGateway(_Network):\n    _icon = \"internet-gateway.png\"\n\n\nclass Nacl(_Network):\n    _icon = \"nacl.png\"\n\n\nclass NATGateway(_Network):\n    _icon = \"nat-gateway.png\"\n\n\nclass NetworkFirewall(_Network):\n    _icon = \"network-firewall.png\"\n\n\nclass NetworkingAndContentDelivery(_Network):\n    _icon = \"networking-and-content-delivery.png\"\n\n\nclass PrivateSubnet(_Network):\n    _icon = \"private-subnet.png\"\n\n\nclass Privatelink(_Network):\n    _icon = \"privatelink.png\"\n\n\nclass PublicSubnet(_Network):\n    _icon = \"public-subnet.png\"\n\n\nclass Route53HostedZone(_Network):\n    _icon = \"route-53-hosted-zone.png\"\n\n\nclass Route53(_Network):\n    _icon = \"route-53.png\"\n\n\nclass RouteTable(_Network):\n    _icon = \"route-table.png\"\n\n\nclass SiteToSiteVpn(_Network):\n    _icon = \"site-to-site-vpn.png\"\n\n\nclass TransitGatewayAttachment(_Network):\n    _icon = \"transit-gateway-attachment.png\"\n\n\nclass TransitGateway(_Network):\n    _icon = \"transit-gateway.png\"\n\n\nclass VPCCustomerGateway(_Network):\n    _icon = \"vpc-customer-gateway.png\"\n\n\nclass VPCElasticNetworkAdapter(_Network):\n    _icon = \"vpc-elastic-network-adapter.png\"\n\n\nclass VPCElasticNetworkInterface(_Network):\n    _icon = \"vpc-elastic-network-interface.png\"\n\n\nclass VPCFlowLogs(_Network):\n    _icon = \"vpc-flow-logs.png\"\n\n\nclass VPCPeering(_Network):\n    _icon = \"vpc-peering.png\"\n\n\nclass VPCRouter(_Network):\n    _icon = \"vpc-router.png\"\n\n\nclass VPCTrafficMirroring(_Network):\n    _icon = \"vpc-traffic-mirroring.png\"\n\n\nclass VPC(_Network):\n    _icon = \"vpc.png\"\n\n\nclass VpnConnection(_Network):\n    _icon = \"vpn-connection.png\"\n\n\nclass VpnGateway(_Network):\n    _icon = \"vpn-gateway.png\"\n\n\n# Aliases\n\nCF = CloudFront\nELB = ElasticLoadBalancing\nALB = ElbApplicationLoadBalancer\nCLB = ElbClassicLoadBalancer\nNLB = ElbNetworkLoadBalancer\nGAX = GlobalAccelerator\nIGW = InternetGateway\nTGW = TransitGateway\nTGWAttach = TransitGatewayAttachment\n"
  },
  {
    "path": "diagrams/aws/quantum.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Quantum(_AWS):\n    _type = \"quantum\"\n    _icon_dir = \"resources/aws/quantum\"\n\n\nclass Braket(_Quantum):\n    _icon = \"braket.png\"\n\n\nclass QuantumTechnologies(_Quantum):\n    _icon = \"quantum-technologies.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/robotics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Robotics(_AWS):\n    _type = \"robotics\"\n    _icon_dir = \"resources/aws/robotics\"\n\n\nclass RobomakerCloudExtensionRos(_Robotics):\n    _icon = \"robomaker-cloud-extension-ros.png\"\n\n\nclass RobomakerDevelopmentEnvironment(_Robotics):\n    _icon = \"robomaker-development-environment.png\"\n\n\nclass RobomakerFleetManagement(_Robotics):\n    _icon = \"robomaker-fleet-management.png\"\n\n\nclass RobomakerSimulator(_Robotics):\n    _icon = \"robomaker-simulator.png\"\n\n\nclass Robomaker(_Robotics):\n    _icon = \"robomaker.png\"\n\n\nclass Robotics(_Robotics):\n    _icon = \"robotics.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/satellite.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Satellite(_AWS):\n    _type = \"satellite\"\n    _icon_dir = \"resources/aws/satellite\"\n\n\nclass GroundStation(_Satellite):\n    _icon = \"ground-station.png\"\n\n\nclass Satellite(_Satellite):\n    _icon = \"satellite.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/aws/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Security(_AWS):\n    _type = \"security\"\n    _icon_dir = \"resources/aws/security\"\n\n\nclass AdConnector(_Security):\n    _icon = \"ad-connector.png\"\n\n\nclass Artifact(_Security):\n    _icon = \"artifact.png\"\n\n\nclass CertificateAuthority(_Security):\n    _icon = \"certificate-authority.png\"\n\n\nclass CertificateManager(_Security):\n    _icon = \"certificate-manager.png\"\n\n\nclass CloudDirectory(_Security):\n    _icon = \"cloud-directory.png\"\n\n\nclass Cloudhsm(_Security):\n    _icon = \"cloudhsm.png\"\n\n\nclass Cognito(_Security):\n    _icon = \"cognito.png\"\n\n\nclass Detective(_Security):\n    _icon = \"detective.png\"\n\n\nclass DirectoryService(_Security):\n    _icon = \"directory-service.png\"\n\n\nclass FirewallManager(_Security):\n    _icon = \"firewall-manager.png\"\n\n\nclass Guardduty(_Security):\n    _icon = \"guardduty.png\"\n\n\nclass IdentityAndAccessManagementIamAccessAnalyzer(_Security):\n    _icon = \"identity-and-access-management-iam-access-analyzer.png\"\n\n\nclass IdentityAndAccessManagementIamAddOn(_Security):\n    _icon = \"identity-and-access-management-iam-add-on.png\"\n\n\nclass IdentityAndAccessManagementIamAWSStsAlternate(_Security):\n    _icon = \"identity-and-access-management-iam-aws-sts-alternate.png\"\n\n\nclass IdentityAndAccessManagementIamAWSSts(_Security):\n    _icon = \"identity-and-access-management-iam-aws-sts.png\"\n\n\nclass IdentityAndAccessManagementIamDataEncryptionKey(_Security):\n    _icon = \"identity-and-access-management-iam-data-encryption-key.png\"\n\n\nclass IdentityAndAccessManagementIamEncryptedData(_Security):\n    _icon = \"identity-and-access-management-iam-encrypted-data.png\"\n\n\nclass IdentityAndAccessManagementIamLongTermSecurityCredential(_Security):\n    _icon = \"identity-and-access-management-iam-long-term-security-credential.png\"\n\n\nclass IdentityAndAccessManagementIamMfaToken(_Security):\n    _icon = \"identity-and-access-management-iam-mfa-token.png\"\n\n\nclass IdentityAndAccessManagementIamPermissions(_Security):\n    _icon = \"identity-and-access-management-iam-permissions.png\"\n\n\nclass IdentityAndAccessManagementIamRole(_Security):\n    _icon = \"identity-and-access-management-iam-role.png\"\n\n\nclass IdentityAndAccessManagementIamTemporarySecurityCredential(_Security):\n    _icon = \"identity-and-access-management-iam-temporary-security-credential.png\"\n\n\nclass IdentityAndAccessManagementIam(_Security):\n    _icon = \"identity-and-access-management-iam.png\"\n\n\nclass InspectorAgent(_Security):\n    _icon = \"inspector-agent.png\"\n\n\nclass Inspector(_Security):\n    _icon = \"inspector.png\"\n\n\nclass KeyManagementService(_Security):\n    _icon = \"key-management-service.png\"\n\n\nclass Macie(_Security):\n    _icon = \"macie.png\"\n\n\nclass ManagedMicrosoftAd(_Security):\n    _icon = \"managed-microsoft-ad.png\"\n\n\nclass ResourceAccessManager(_Security):\n    _icon = \"resource-access-manager.png\"\n\n\nclass SecretsManager(_Security):\n    _icon = \"secrets-manager.png\"\n\n\nclass SecurityHubFinding(_Security):\n    _icon = \"security-hub-finding.png\"\n\n\nclass SecurityHub(_Security):\n    _icon = \"security-hub.png\"\n\n\nclass SecurityIdentityAndCompliance(_Security):\n    _icon = \"security-identity-and-compliance.png\"\n\n\nclass SecurityLake(_Security):\n    _icon = \"security-lake.png\"\n\n\nclass ShieldAdvanced(_Security):\n    _icon = \"shield-advanced.png\"\n\n\nclass Shield(_Security):\n    _icon = \"shield.png\"\n\n\nclass SimpleAd(_Security):\n    _icon = \"simple-ad.png\"\n\n\nclass SingleSignOn(_Security):\n    _icon = \"single-sign-on.png\"\n\n\nclass WAFFilteringRule(_Security):\n    _icon = \"waf-filtering-rule.png\"\n\n\nclass WAF(_Security):\n    _icon = \"waf.png\"\n\n\n# Aliases\n\nACM = CertificateManager\nCloudHSM = Cloudhsm\nDS = DirectoryService\nFMS = FirewallManager\nIAMAccessAnalyzer = IdentityAndAccessManagementIamAccessAnalyzer\nIAMAWSSts = IdentityAndAccessManagementIamAWSSts\nIAMPermissions = IdentityAndAccessManagementIamPermissions\nIAMRole = IdentityAndAccessManagementIamRole\nIAM = IdentityAndAccessManagementIam\nKMS = KeyManagementService\nRAM = ResourceAccessManager\n"
  },
  {
    "path": "diagrams/aws/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _AWS\n\n\nclass _Storage(_AWS):\n    _type = \"storage\"\n    _icon_dir = \"resources/aws/storage\"\n\n\nclass Backup(_Storage):\n    _icon = \"backup.png\"\n\n\nclass CloudendureDisasterRecovery(_Storage):\n    _icon = \"cloudendure-disaster-recovery.png\"\n\n\nclass EFSInfrequentaccessPrimaryBg(_Storage):\n    _icon = \"efs-infrequentaccess-primary-bg.png\"\n\n\nclass EFSStandardPrimaryBg(_Storage):\n    _icon = \"efs-standard-primary-bg.png\"\n\n\nclass ElasticBlockStoreEBSSnapshot(_Storage):\n    _icon = \"elastic-block-store-ebs-snapshot.png\"\n\n\nclass ElasticBlockStoreEBSVolume(_Storage):\n    _icon = \"elastic-block-store-ebs-volume.png\"\n\n\nclass ElasticBlockStoreEBS(_Storage):\n    _icon = \"elastic-block-store-ebs.png\"\n\n\nclass ElasticFileSystemEFSFileSystem(_Storage):\n    _icon = \"elastic-file-system-efs-file-system.png\"\n\n\nclass ElasticFileSystemEFS(_Storage):\n    _icon = \"elastic-file-system-efs.png\"\n\n\nclass FsxForLustre(_Storage):\n    _icon = \"fsx-for-lustre.png\"\n\n\nclass FsxForWindowsFileServer(_Storage):\n    _icon = \"fsx-for-windows-file-server.png\"\n\n\nclass Fsx(_Storage):\n    _icon = \"fsx.png\"\n\n\nclass MultipleVolumesResource(_Storage):\n    _icon = \"multiple-volumes-resource.png\"\n\n\nclass S3AccessPoints(_Storage):\n    _icon = \"s3-access-points.png\"\n\n\nclass S3GlacierArchive(_Storage):\n    _icon = \"s3-glacier-archive.png\"\n\n\nclass S3GlacierVault(_Storage):\n    _icon = \"s3-glacier-vault.png\"\n\n\nclass S3Glacier(_Storage):\n    _icon = \"s3-glacier.png\"\n\n\nclass S3ObjectLambdaAccessPoints(_Storage):\n    _icon = \"s3-object-lambda-access-points.png\"\n\n\nclass SimpleStorageServiceS3BucketWithObjects(_Storage):\n    _icon = \"simple-storage-service-s3-bucket-with-objects.png\"\n\n\nclass SimpleStorageServiceS3Bucket(_Storage):\n    _icon = \"simple-storage-service-s3-bucket.png\"\n\n\nclass SimpleStorageServiceS3Object(_Storage):\n    _icon = \"simple-storage-service-s3-object.png\"\n\n\nclass SimpleStorageServiceS3(_Storage):\n    _icon = \"simple-storage-service-s3.png\"\n\n\nclass SnowFamilySnowballImportExport(_Storage):\n    _icon = \"snow-family-snowball-import-export.png\"\n\n\nclass SnowballEdge(_Storage):\n    _icon = \"snowball-edge.png\"\n\n\nclass Snowball(_Storage):\n    _icon = \"snowball.png\"\n\n\nclass Snowmobile(_Storage):\n    _icon = \"snowmobile.png\"\n\n\nclass StorageGatewayCachedVolume(_Storage):\n    _icon = \"storage-gateway-cached-volume.png\"\n\n\nclass StorageGatewayNonCachedVolume(_Storage):\n    _icon = \"storage-gateway-non-cached-volume.png\"\n\n\nclass StorageGatewayVirtualTapeLibrary(_Storage):\n    _icon = \"storage-gateway-virtual-tape-library.png\"\n\n\nclass StorageGateway(_Storage):\n    _icon = \"storage-gateway.png\"\n\n\nclass Storage(_Storage):\n    _icon = \"storage.png\"\n\n\n# Aliases\n\nCDR = CloudendureDisasterRecovery\nEBS = ElasticBlockStoreEBS\nEFS = ElasticFileSystemEFS\nFSx = Fsx\nS3 = SimpleStorageServiceS3\n"
  },
  {
    "path": "diagrams/azure/__init__.py",
    "content": "\"\"\"\nAzure provides a set of services for Microsoft Azure provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Azure(Node):\n    _provider = \"azure\"\n    _icon_dir = \"resources/azure\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Azure(_Azure):\n    _icon = \"azure.png\"\n"
  },
  {
    "path": "diagrams/azure/aimachinelearning.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Aimachinelearning(_Azure):\n    _type = \"aimachinelearning\"\n    _icon_dir = \"resources/azure/aimachinelearning\"\n\n\nclass AIStudio(_Aimachinelearning):\n    _icon = \"ai-studio.png\"\n\n\nclass AnomalyDetector(_Aimachinelearning):\n    _icon = \"anomaly-detector.png\"\n\n\nclass AzureAppliedAIServices(_Aimachinelearning):\n    _icon = \"azure-applied-ai-services.png\"\n\n\nclass AzureExperimentationStudio(_Aimachinelearning):\n    _icon = \"azure-experimentation-studio.png\"\n\n\nclass AzureObjectUnderstanding(_Aimachinelearning):\n    _icon = \"azure-object-understanding.png\"\n\n\nclass AzureOpenai(_Aimachinelearning):\n    _icon = \"azure-openai.png\"\n\n\nclass BatchAI(_Aimachinelearning):\n    _icon = \"batch-ai.png\"\n\n\nclass Bonsai(_Aimachinelearning):\n    _icon = \"bonsai.png\"\n\n\nclass BotServices(_Aimachinelearning):\n    _icon = \"bot-services.png\"\n\n\nclass CognitiveSearch(_Aimachinelearning):\n    _icon = \"cognitive-search.png\"\n\n\nclass CognitiveServicesDecisions(_Aimachinelearning):\n    _icon = \"cognitive-services-decisions.png\"\n\n\nclass CognitiveServices(_Aimachinelearning):\n    _icon = \"cognitive-services.png\"\n\n\nclass ComputerVision(_Aimachinelearning):\n    _icon = \"computer-vision.png\"\n\n\nclass ContentModerators(_Aimachinelearning):\n    _icon = \"content-moderators.png\"\n\n\nclass CustomVision(_Aimachinelearning):\n    _icon = \"custom-vision.png\"\n\n\nclass FaceApis(_Aimachinelearning):\n    _icon = \"face-apis.png\"\n\n\nclass FormRecognizers(_Aimachinelearning):\n    _icon = \"form-recognizers.png\"\n\n\nclass GenomicsAccounts(_Aimachinelearning):\n    _icon = \"genomics-accounts.png\"\n\n\nclass Genomics(_Aimachinelearning):\n    _icon = \"genomics.png\"\n\n\nclass ImmersiveReaders(_Aimachinelearning):\n    _icon = \"immersive-readers.png\"\n\n\nclass LanguageUnderstanding(_Aimachinelearning):\n    _icon = \"language-understanding.png\"\n\n\nclass Language(_Aimachinelearning):\n    _icon = \"language.png\"\n\n\nclass MachineLearningStudioClassicWebServices(_Aimachinelearning):\n    _icon = \"machine-learning-studio-classic-web-services.png\"\n\n\nclass MachineLearningStudioWebServicePlans(_Aimachinelearning):\n    _icon = \"machine-learning-studio-web-service-plans.png\"\n\n\nclass MachineLearningStudioWorkspaces(_Aimachinelearning):\n    _icon = \"machine-learning-studio-workspaces.png\"\n\n\nclass MachineLearning(_Aimachinelearning):\n    _icon = \"machine-learning.png\"\n\n\nclass MetricsAdvisor(_Aimachinelearning):\n    _icon = \"metrics-advisor.png\"\n\n\nclass Personalizers(_Aimachinelearning):\n    _icon = \"personalizers.png\"\n\n\nclass QnaMakers(_Aimachinelearning):\n    _icon = \"qna-makers.png\"\n\n\nclass ServerlessSearch(_Aimachinelearning):\n    _icon = \"serverless-search.png\"\n\n\nclass SpeechServices(_Aimachinelearning):\n    _icon = \"speech-services.png\"\n\n\nclass TranslatorText(_Aimachinelearning):\n    _icon = \"translator-text.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Analytics(_Azure):\n    _type = \"analytics\"\n    _icon_dir = \"resources/azure/analytics\"\n\n\nclass AnalysisServices(_Analytics):\n    _icon = \"analysis-services.png\"\n\n\nclass AzureDataExplorerClusters(_Analytics):\n    _icon = \"azure-data-explorer-clusters.png\"\n\n\nclass AzureDatabricks(_Analytics):\n    _icon = \"azure-databricks.png\"\n\n\nclass AzureSynapseAnalytics(_Analytics):\n    _icon = \"azure-synapse-analytics.png\"\n\n\nclass AzureWorkbooks(_Analytics):\n    _icon = \"azure-workbooks.png\"\n\n\nclass DataExplorerClusters(_Analytics):\n    _icon = \"data-explorer-clusters.png\"\n\n\nclass DataFactories(_Analytics):\n    _icon = \"data-factories.png\"\n\n\nclass DataLakeAnalytics(_Analytics):\n    _icon = \"data-lake-analytics.png\"\n\n\nclass DataLakeStoreGen1(_Analytics):\n    _icon = \"data-lake-store-gen1.png\"\n\n\nclass Databricks(_Analytics):\n    _icon = \"databricks.png\"\n\n\nclass EndpointAnalytics(_Analytics):\n    _icon = \"endpoint-analytics.png\"\n\n\nclass EventHubClusters(_Analytics):\n    _icon = \"event-hub-clusters.png\"\n\n\nclass EventHubs(_Analytics):\n    _icon = \"event-hubs.png\"\n\n\nclass HDInsightClusters(_Analytics):\n    _icon = \"hd-insight-clusters.png\"\n\n\nclass LogAnalyticsWorkspaces(_Analytics):\n    _icon = \"log-analytics-workspaces.png\"\n\n\nclass PowerBiEmbedded(_Analytics):\n    _icon = \"power-bi-embedded.png\"\n\n\nclass PowerPlatform(_Analytics):\n    _icon = \"power-platform.png\"\n\n\nclass PrivateLinkServices(_Analytics):\n    _icon = \"private-link-services.png\"\n\n\nclass StreamAnalyticsJobs(_Analytics):\n    _icon = \"stream-analytics-jobs.png\"\n\n\nclass SynapseAnalytics(_Analytics):\n    _icon = \"synapse-analytics.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/appservices.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Appservices(_Azure):\n    _type = \"appservices\"\n    _icon_dir = \"resources/azure/appservices\"\n\n\nclass AppServiceCertificates(_Appservices):\n    _icon = \"app-service-certificates.png\"\n\n\nclass AppServiceDomains(_Appservices):\n    _icon = \"app-service-domains.png\"\n\n\nclass AppServiceEnvironments(_Appservices):\n    _icon = \"app-service-environments.png\"\n\n\nclass AppServicePlans(_Appservices):\n    _icon = \"app-service-plans.png\"\n\n\nclass AppServices(_Appservices):\n    _icon = \"app-services.png\"\n\n\nclass CDNProfiles(_Appservices):\n    _icon = \"cdn-profiles.png\"\n\n\nclass CognitiveSearch(_Appservices):\n    _icon = \"cognitive-search.png\"\n\n\nclass NotificationHubs(_Appservices):\n    _icon = \"notification-hubs.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/azureecosystem.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Azureecosystem(_Azure):\n    _type = \"azureecosystem\"\n    _icon_dir = \"resources/azure/azureecosystem\"\n\n\nclass Applens(_Azureecosystem):\n    _icon = \"applens.png\"\n\n\nclass AzureHybridCenter(_Azureecosystem):\n    _icon = \"azure-hybrid-center.png\"\n\n\nclass CollaborativeService(_Azureecosystem):\n    _icon = \"collaborative-service.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/azurestack.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Azurestack(_Azure):\n    _type = \"azurestack\"\n    _icon_dir = \"resources/azure/azurestack\"\n\n\nclass Capacity(_Azurestack):\n    _icon = \"capacity.png\"\n\n\nclass InfrastructureBackup(_Azurestack):\n    _icon = \"infrastructure-backup.png\"\n\n\nclass MultiTenancy(_Azurestack):\n    _icon = \"multi-tenancy.png\"\n\n\nclass Offers(_Azurestack):\n    _icon = \"offers.png\"\n\n\nclass Plans(_Azurestack):\n    _icon = \"plans.png\"\n\n\nclass Updates(_Azurestack):\n    _icon = \"updates.png\"\n\n\nclass UserSubscriptions(_Azurestack):\n    _icon = \"user-subscriptions.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/blockchain.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Blockchain(_Azure):\n    _type = \"blockchain\"\n    _icon_dir = \"resources/azure/blockchain\"\n\n\nclass AbsMember(_Blockchain):\n    _icon = \"abs-member.png\"\n\n\nclass AzureBlockchainService(_Blockchain):\n    _icon = \"azure-blockchain-service.png\"\n\n\nclass AzureTokenService(_Blockchain):\n    _icon = \"azure-token-service.png\"\n\n\nclass BlockchainApplications(_Blockchain):\n    _icon = \"blockchain-applications.png\"\n\n\nclass Consortium(_Blockchain):\n    _icon = \"consortium.png\"\n\n\nclass OutboundConnection(_Blockchain):\n    _icon = \"outbound-connection.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Compute(_Azure):\n    _type = \"compute\"\n    _icon_dir = \"resources/azure/compute\"\n\n\nclass AppServices(_Compute):\n    _icon = \"app-services.png\"\n\n\nclass ApplicationGroup(_Compute):\n    _icon = \"application-group.png\"\n\n\nclass AutomanagedVM(_Compute):\n    _icon = \"automanaged-vm.png\"\n\n\nclass AvailabilitySets(_Compute):\n    _icon = \"availability-sets.png\"\n\n\nclass AzureComputeGalleries(_Compute):\n    _icon = \"azure-compute-galleries.png\"\n\n\nclass AzureSpringApps(_Compute):\n    _icon = \"azure-spring-apps.png\"\n\n\nclass BatchAccounts(_Compute):\n    _icon = \"batch-accounts.png\"\n\n\nclass CitrixVirtualDesktopsEssentials(_Compute):\n    _icon = \"citrix-virtual-desktops-essentials.png\"\n\n\nclass CloudServicesClassic(_Compute):\n    _icon = \"cloud-services-classic.png\"\n\n\nclass CloudServices(_Compute):\n    _icon = \"cloud-services.png\"\n\n\nclass CloudsimpleVirtualMachines(_Compute):\n    _icon = \"cloudsimple-virtual-machines.png\"\n\n\nclass ContainerApps(_Compute):\n    _icon = \"container-apps.png\"\n\n\nclass ContainerInstances(_Compute):\n    _icon = \"container-instances.png\"\n\n\nclass ContainerRegistries(_Compute):\n    _icon = \"container-registries.png\"\n\n\nclass ContainerServicesDeprecated(_Compute):\n    _icon = \"container-services-deprecated.png\"\n\n\nclass DiskEncryptionSets(_Compute):\n    _icon = \"disk-encryption-sets.png\"\n\n\nclass DiskSnapshots(_Compute):\n    _icon = \"disk-snapshots.png\"\n\n\nclass DisksClassic(_Compute):\n    _icon = \"disks-classic.png\"\n\n\nclass DisksSnapshots(_Compute):\n    _icon = \"disks-snapshots.png\"\n\n\nclass Disks(_Compute):\n    _icon = \"disks.png\"\n\n\nclass FunctionApps(_Compute):\n    _icon = \"function-apps.png\"\n\n\nclass HostGroups(_Compute):\n    _icon = \"host-groups.png\"\n\n\nclass HostPools(_Compute):\n    _icon = \"host-pools.png\"\n\n\nclass Hosts(_Compute):\n    _icon = \"hosts.png\"\n\n\nclass ImageDefinitions(_Compute):\n    _icon = \"image-definitions.png\"\n\n\nclass ImageTemplates(_Compute):\n    _icon = \"image-templates.png\"\n\n\nclass ImageVersions(_Compute):\n    _icon = \"image-versions.png\"\n\n\nclass Images(_Compute):\n    _icon = \"images.png\"\n\n\nclass KubernetesServices(_Compute):\n    _icon = \"kubernetes-services.png\"\n\n\nclass MaintenanceConfiguration(_Compute):\n    _icon = \"maintenance-configuration.png\"\n\n\nclass ManagedServiceFabric(_Compute):\n    _icon = \"managed-service-fabric.png\"\n\n\nclass MeshApplications(_Compute):\n    _icon = \"mesh-applications.png\"\n\n\nclass MetricsAdvisor(_Compute):\n    _icon = \"metrics-advisor.png\"\n\n\nclass OsImagesClassic(_Compute):\n    _icon = \"os-images-classic.png\"\n\n\nclass OsImages(_Compute):\n    _icon = \"os-images.png\"\n\n\nclass RestorePointsCollections(_Compute):\n    _icon = \"restore-points-collections.png\"\n\n\nclass RestorePoints(_Compute):\n    _icon = \"restore-points.png\"\n\n\nclass SAPHANAOnAzure(_Compute):\n    _icon = \"sap-hana-on-azure.png\"\n\n\nclass ServiceFabricClusters(_Compute):\n    _icon = \"service-fabric-clusters.png\"\n\n\nclass SharedImageGalleries(_Compute):\n    _icon = \"shared-image-galleries.png\"\n\n\nclass SpringCloud(_Compute):\n    _icon = \"spring-cloud.png\"\n\n\nclass VirtualMachine(_Compute):\n    _icon = \"virtual-machine.png\"\n\n\nclass VirtualMachinesClassic(_Compute):\n    _icon = \"virtual-machines-classic.png\"\n\n\nclass VMClassic(_Compute):\n    _icon = \"vm-classic.png\"\n\n\nclass VMImagesClassic(_Compute):\n    _icon = \"vm-images-classic.png\"\n\n\nclass VMImages(_Compute):\n    _icon = \"vm-images.png\"\n\n\nclass VMLinux(_Compute):\n    _icon = \"vm-linux.png\"\n\n\nclass VMScaleSet(_Compute):\n    _icon = \"vm-scale-set.png\"\n\n\nclass VMScaleSets(_Compute):\n    _icon = \"vm-scale-sets.png\"\n\n\nclass VMWindows(_Compute):\n    _icon = \"vm-windows.png\"\n\n\nclass VM(_Compute):\n    _icon = \"vm.png\"\n\n\nclass Workspaces2(_Compute):\n    _icon = \"workspaces-2.png\"\n\n\nclass Workspaces(_Compute):\n    _icon = \"workspaces.png\"\n\n\n# Aliases\n\nACR = ContainerRegistries\nAKS = KubernetesServices\nVMSS = VMScaleSet\n"
  },
  {
    "path": "diagrams/azure/containers.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Containers(_Azure):\n    _type = \"containers\"\n    _icon_dir = \"resources/azure/containers\"\n\n\nclass AppServices(_Containers):\n    _icon = \"app-services.png\"\n\n\nclass AzureRedHatOpenshift(_Containers):\n    _icon = \"azure-red-hat-openshift.png\"\n\n\nclass BatchAccounts(_Containers):\n    _icon = \"batch-accounts.png\"\n\n\nclass ContainerInstances(_Containers):\n    _icon = \"container-instances.png\"\n\n\nclass ContainerRegistries(_Containers):\n    _icon = \"container-registries.png\"\n\n\nclass KubernetesServices(_Containers):\n    _icon = \"kubernetes-services.png\"\n\n\nclass ServiceFabricClusters(_Containers):\n    _icon = \"service-fabric-clusters.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Database(_Azure):\n    _type = \"database\"\n    _icon_dir = \"resources/azure/database\"\n\n\nclass BlobStorage(_Database):\n    _icon = \"blob-storage.png\"\n\n\nclass CacheForRedis(_Database):\n    _icon = \"cache-for-redis.png\"\n\n\nclass CosmosDb(_Database):\n    _icon = \"cosmos-db.png\"\n\n\nclass DataExplorerClusters(_Database):\n    _icon = \"data-explorer-clusters.png\"\n\n\nclass DataFactory(_Database):\n    _icon = \"data-factory.png\"\n\n\nclass DataLake(_Database):\n    _icon = \"data-lake.png\"\n\n\nclass DatabaseForMariadbServers(_Database):\n    _icon = \"database-for-mariadb-servers.png\"\n\n\nclass DatabaseForMysqlServers(_Database):\n    _icon = \"database-for-mysql-servers.png\"\n\n\nclass DatabaseForPostgresqlServers(_Database):\n    _icon = \"database-for-postgresql-servers.png\"\n\n\nclass ElasticDatabasePools(_Database):\n    _icon = \"elastic-database-pools.png\"\n\n\nclass ElasticJobAgents(_Database):\n    _icon = \"elastic-job-agents.png\"\n\n\nclass InstancePools(_Database):\n    _icon = \"instance-pools.png\"\n\n\nclass ManagedDatabases(_Database):\n    _icon = \"managed-databases.png\"\n\n\nclass SQLDatabases(_Database):\n    _icon = \"sql-databases.png\"\n\n\nclass SQLDatawarehouse(_Database):\n    _icon = \"sql-datawarehouse.png\"\n\n\nclass SQLManagedInstances(_Database):\n    _icon = \"sql-managed-instances.png\"\n\n\nclass SQLServerStretchDatabases(_Database):\n    _icon = \"sql-server-stretch-databases.png\"\n\n\nclass SQLServers(_Database):\n    _icon = \"sql-servers.png\"\n\n\nclass SQLVM(_Database):\n    _icon = \"sql-vm.png\"\n\n\nclass SQL(_Database):\n    _icon = \"sql.png\"\n\n\nclass SsisLiftAndShiftIr(_Database):\n    _icon = \"ssis-lift-and-shift-ir.png\"\n\n\nclass SynapseAnalytics(_Database):\n    _icon = \"synapse-analytics.png\"\n\n\nclass VirtualClusters(_Database):\n    _icon = \"virtual-clusters.png\"\n\n\nclass VirtualDatacenter(_Database):\n    _icon = \"virtual-datacenter.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/databases.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Databases(_Azure):\n    _type = \"databases\"\n    _icon_dir = \"resources/azure/databases\"\n\n\nclass AzureCosmosDb(_Databases):\n    _icon = \"azure-cosmos-db.png\"\n\n\nclass AzureDataExplorerClusters(_Databases):\n    _icon = \"azure-data-explorer-clusters.png\"\n\n\nclass AzureDatabaseMariadbServer(_Databases):\n    _icon = \"azure-database-mariadb-server.png\"\n\n\nclass AzureDatabaseMigrationServices(_Databases):\n    _icon = \"azure-database-migration-services.png\"\n\n\nclass AzureDatabaseMysqlServer(_Databases):\n    _icon = \"azure-database-mysql-server.png\"\n\n\nclass AzureDatabasePostgresqlServerGroup(_Databases):\n    _icon = \"azure-database-postgresql-server-group.png\"\n\n\nclass AzureDatabasePostgresqlServer(_Databases):\n    _icon = \"azure-database-postgresql-server.png\"\n\n\nclass AzurePurviewAccounts(_Databases):\n    _icon = \"azure-purview-accounts.png\"\n\n\nclass AzureSQLEdge(_Databases):\n    _icon = \"azure-sql-edge.png\"\n\n\nclass AzureSQLServerStretchDatabases(_Databases):\n    _icon = \"azure-sql-server-stretch-databases.png\"\n\n\nclass AzureSQLVM(_Databases):\n    _icon = \"azure-sql-vm.png\"\n\n\nclass AzureSQL(_Databases):\n    _icon = \"azure-sql.png\"\n\n\nclass AzureSynapseAnalytics(_Databases):\n    _icon = \"azure-synapse-analytics.png\"\n\n\nclass CacheRedis(_Databases):\n    _icon = \"cache-redis.png\"\n\n\nclass DataFactories(_Databases):\n    _icon = \"data-factories.png\"\n\n\nclass ElasticJobAgents(_Databases):\n    _icon = \"elastic-job-agents.png\"\n\n\nclass InstancePools(_Databases):\n    _icon = \"instance-pools.png\"\n\n\nclass ManagedDatabase(_Databases):\n    _icon = \"managed-database.png\"\n\n\nclass OracleDatabase(_Databases):\n    _icon = \"oracle-database.png\"\n\n\nclass SQLDataWarehouses(_Databases):\n    _icon = \"sql-data-warehouses.png\"\n\n\nclass SQLDatabase(_Databases):\n    _icon = \"sql-database.png\"\n\n\nclass SQLElasticPools(_Databases):\n    _icon = \"sql-elastic-pools.png\"\n\n\nclass SQLManagedInstance(_Databases):\n    _icon = \"sql-managed-instance.png\"\n\n\nclass SQLServerRegistries(_Databases):\n    _icon = \"sql-server-registries.png\"\n\n\nclass SQLServer(_Databases):\n    _icon = \"sql-server.png\"\n\n\nclass SsisLiftAndShiftIr(_Databases):\n    _icon = \"ssis-lift-and-shift-ir.png\"\n\n\nclass VirtualClusters(_Databases):\n    _icon = \"virtual-clusters.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/devops.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Devops(_Azure):\n    _type = \"devops\"\n    _icon_dir = \"resources/azure/devops\"\n\n\nclass APIConnections(_Devops):\n    _icon = \"api-connections.png\"\n\n\nclass APIManagementServices(_Devops):\n    _icon = \"api-management-services.png\"\n\n\nclass ApplicationInsights(_Devops):\n    _icon = \"application-insights.png\"\n\n\nclass Artifacts(_Devops):\n    _icon = \"artifacts.png\"\n\n\nclass AzureDevops(_Devops):\n    _icon = \"azure-devops.png\"\n\n\nclass Boards(_Devops):\n    _icon = \"boards.png\"\n\n\nclass ChangeAnalysis(_Devops):\n    _icon = \"change-analysis.png\"\n\n\nclass Cloudtest(_Devops):\n    _icon = \"cloudtest.png\"\n\n\nclass CodeOptimization(_Devops):\n    _icon = \"code-optimization.png\"\n\n\nclass DevopsStarter(_Devops):\n    _icon = \"devops-starter.png\"\n\n\nclass Devops(_Devops):\n    _icon = \"devops.png\"\n\n\nclass DevtestLabs(_Devops):\n    _icon = \"devtest-labs.png\"\n\n\nclass LabAccounts(_Devops):\n    _icon = \"lab-accounts.png\"\n\n\nclass LabServices(_Devops):\n    _icon = \"lab-services.png\"\n\n\nclass LoadTesting(_Devops):\n    _icon = \"load-testing.png\"\n\n\nclass Pipelines(_Devops):\n    _icon = \"pipelines.png\"\n\n\nclass Repos(_Devops):\n    _icon = \"repos.png\"\n\n\nclass TestPlans(_Devops):\n    _icon = \"test-plans.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/general.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _General(_Azure):\n    _type = \"general\"\n    _icon_dir = \"resources/azure/general\"\n\n\nclass AllResources(_General):\n    _icon = \"all-resources.png\"\n\n\nclass Allresources(_General):\n    _icon = \"allresources.png\"\n\n\nclass Azurehome(_General):\n    _icon = \"azurehome.png\"\n\n\nclass Backlog(_General):\n    _icon = \"backlog.png\"\n\n\nclass BizTalk(_General):\n    _icon = \"biz-talk.png\"\n\n\nclass BlobBlock(_General):\n    _icon = \"blob-block.png\"\n\n\nclass BlobPage(_General):\n    _icon = \"blob-page.png\"\n\n\nclass Branch(_General):\n    _icon = \"branch.png\"\n\n\nclass Browser(_General):\n    _icon = \"browser.png\"\n\n\nclass Bug(_General):\n    _icon = \"bug.png\"\n\n\nclass Builds(_General):\n    _icon = \"builds.png\"\n\n\nclass Cache(_General):\n    _icon = \"cache.png\"\n\n\nclass Code(_General):\n    _icon = \"code.png\"\n\n\nclass Commit(_General):\n    _icon = \"commit.png\"\n\n\nclass ControlsHorizontal(_General):\n    _icon = \"controls-horizontal.png\"\n\n\nclass Controls(_General):\n    _icon = \"controls.png\"\n\n\nclass CostAlerts(_General):\n    _icon = \"cost-alerts.png\"\n\n\nclass CostAnalysis(_General):\n    _icon = \"cost-analysis.png\"\n\n\nclass CostBudgets(_General):\n    _icon = \"cost-budgets.png\"\n\n\nclass CostManagementAndBilling(_General):\n    _icon = \"cost-management-and-billing.png\"\n\n\nclass CostManagement(_General):\n    _icon = \"cost-management.png\"\n\n\nclass Counter(_General):\n    _icon = \"counter.png\"\n\n\nclass Cubes(_General):\n    _icon = \"cubes.png\"\n\n\nclass Dashboard(_General):\n    _icon = \"dashboard.png\"\n\n\nclass DevConsole(_General):\n    _icon = \"dev-console.png\"\n\n\nclass Developertools(_General):\n    _icon = \"developertools.png\"\n\n\nclass Download(_General):\n    _icon = \"download.png\"\n\n\nclass Error(_General):\n    _icon = \"error.png\"\n\n\nclass Extensions(_General):\n    _icon = \"extensions.png\"\n\n\nclass FeaturePreviews(_General):\n    _icon = \"feature-previews.png\"\n\n\nclass File(_General):\n    _icon = \"file.png\"\n\n\nclass Files(_General):\n    _icon = \"files.png\"\n\n\nclass FolderBlank(_General):\n    _icon = \"folder-blank.png\"\n\n\nclass FolderWebsite(_General):\n    _icon = \"folder-website.png\"\n\n\nclass FreeServices(_General):\n    _icon = \"free-services.png\"\n\n\nclass Ftp(_General):\n    _icon = \"ftp.png\"\n\n\nclass Gear(_General):\n    _icon = \"gear.png\"\n\n\nclass GlobeError(_General):\n    _icon = \"globe-error.png\"\n\n\nclass GlobeSuccess(_General):\n    _icon = \"globe-success.png\"\n\n\nclass GlobeWarning(_General):\n    _icon = \"globe-warning.png\"\n\n\nclass Guide(_General):\n    _icon = \"guide.png\"\n\n\nclass Heart(_General):\n    _icon = \"heart.png\"\n\n\nclass HelpAndSupport(_General):\n    _icon = \"help-and-support.png\"\n\n\nclass Helpsupport(_General):\n    _icon = \"helpsupport.png\"\n\n\nclass Image(_General):\n    _icon = \"image.png\"\n\n\nclass Information(_General):\n    _icon = \"information.png\"\n\n\nclass InputOutput(_General):\n    _icon = \"input-output.png\"\n\n\nclass JourneyHub(_General):\n    _icon = \"journey-hub.png\"\n\n\nclass LaunchPortal(_General):\n    _icon = \"launch-portal.png\"\n\n\nclass Learn(_General):\n    _icon = \"learn.png\"\n\n\nclass LoadTest(_General):\n    _icon = \"load-test.png\"\n\n\nclass Location(_General):\n    _icon = \"location.png\"\n\n\nclass LogStreaming(_General):\n    _icon = \"log-streaming.png\"\n\n\nclass ManagementGroups(_General):\n    _icon = \"management-groups.png\"\n\n\nclass ManagementPortal(_General):\n    _icon = \"management-portal.png\"\n\n\nclass Managementgroups(_General):\n    _icon = \"managementgroups.png\"\n\n\nclass MarketplaceManagement(_General):\n    _icon = \"marketplace-management.png\"\n\n\nclass Marketplace(_General):\n    _icon = \"marketplace.png\"\n\n\nclass MediaFile(_General):\n    _icon = \"media-file.png\"\n\n\nclass Media(_General):\n    _icon = \"media.png\"\n\n\nclass MobileEngagement(_General):\n    _icon = \"mobile-engagement.png\"\n\n\nclass Mobile(_General):\n    _icon = \"mobile.png\"\n\n\nclass Module(_General):\n    _icon = \"module.png\"\n\n\nclass PowerUp(_General):\n    _icon = \"power-up.png\"\n\n\nclass Power(_General):\n    _icon = \"power.png\"\n\n\nclass Powershell(_General):\n    _icon = \"powershell.png\"\n\n\nclass PreviewFeatures(_General):\n    _icon = \"preview-features.png\"\n\n\nclass ProcessExplorer(_General):\n    _icon = \"process-explorer.png\"\n\n\nclass ProductionReadyDatabase(_General):\n    _icon = \"production-ready-database.png\"\n\n\nclass QuickstartCenter(_General):\n    _icon = \"quickstart-center.png\"\n\n\nclass Quickstartcenter(_General):\n    _icon = \"quickstartcenter.png\"\n\n\nclass Recent(_General):\n    _icon = \"recent.png\"\n\n\nclass RegionManagement(_General):\n    _icon = \"region-management.png\"\n\n\nclass Reservations(_General):\n    _icon = \"reservations.png\"\n\n\nclass ResourceExplorer(_General):\n    _icon = \"resource-explorer.png\"\n\n\nclass ResourceGroupList(_General):\n    _icon = \"resource-group-list.png\"\n\n\nclass ResourceGroups(_General):\n    _icon = \"resource-groups.png\"\n\n\nclass ResourceLinked(_General):\n    _icon = \"resource-linked.png\"\n\n\nclass Resource(_General):\n    _icon = \"resource.png\"\n\n\nclass Resourcegroups(_General):\n    _icon = \"resourcegroups.png\"\n\n\nclass Scheduler(_General):\n    _icon = \"scheduler.png\"\n\n\nclass SearchGrid(_General):\n    _icon = \"search-grid.png\"\n\n\nclass Search(_General):\n    _icon = \"search.png\"\n\n\nclass ServerFarm(_General):\n    _icon = \"server-farm.png\"\n\n\nclass ServiceHealth(_General):\n    _icon = \"service-health.png\"\n\n\nclass Servicehealth(_General):\n    _icon = \"servicehealth.png\"\n\n\nclass Shareddashboard(_General):\n    _icon = \"shareddashboard.png\"\n\n\nclass Ssd(_General):\n    _icon = \"ssd.png\"\n\n\nclass StorageAzureFiles(_General):\n    _icon = \"storage-azure-files.png\"\n\n\nclass StorageContainer(_General):\n    _icon = \"storage-container.png\"\n\n\nclass StorageQueue(_General):\n    _icon = \"storage-queue.png\"\n\n\nclass Subscriptions(_General):\n    _icon = \"subscriptions.png\"\n\n\nclass Support(_General):\n    _icon = \"support.png\"\n\n\nclass Supportrequests(_General):\n    _icon = \"supportrequests.png\"\n\n\nclass Table(_General):\n    _icon = \"table.png\"\n\n\nclass Tag(_General):\n    _icon = \"tag.png\"\n\n\nclass Tags(_General):\n    _icon = \"tags.png\"\n\n\nclass Templates(_General):\n    _icon = \"templates.png\"\n\n\nclass TfsVcRepository(_General):\n    _icon = \"tfs-vc-repository.png\"\n\n\nclass Toolbox(_General):\n    _icon = \"toolbox.png\"\n\n\nclass Troubleshoot(_General):\n    _icon = \"troubleshoot.png\"\n\n\nclass Twousericon(_General):\n    _icon = \"twousericon.png\"\n\n\nclass Userhealthicon(_General):\n    _icon = \"userhealthicon.png\"\n\n\nclass Usericon(_General):\n    _icon = \"usericon.png\"\n\n\nclass Userprivacy(_General):\n    _icon = \"userprivacy.png\"\n\n\nclass Userresource(_General):\n    _icon = \"userresource.png\"\n\n\nclass Versions(_General):\n    _icon = \"versions.png\"\n\n\nclass WebSlots(_General):\n    _icon = \"web-slots.png\"\n\n\nclass WebTest(_General):\n    _icon = \"web-test.png\"\n\n\nclass WebsitePower(_General):\n    _icon = \"website-power.png\"\n\n\nclass WebsiteStaging(_General):\n    _icon = \"website-staging.png\"\n\n\nclass Whatsnew(_General):\n    _icon = \"whatsnew.png\"\n\n\nclass Workbooks(_General):\n    _icon = \"workbooks.png\"\n\n\nclass Workflow(_General):\n    _icon = \"workflow.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/hybridmulticloud.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Hybridmulticloud(_Azure):\n    _type = \"hybridmulticloud\"\n    _icon_dir = \"resources/azure/hybridmulticloud\"\n\n\nclass AzureOperator5GCore(_Hybridmulticloud):\n    _icon = \"azure-operator-5g-core.png\"\n\n\nclass AzureOperatorInsights(_Hybridmulticloud):\n    _icon = \"azure-operator-insights.png\"\n\n\nclass AzureOperatorNexus(_Hybridmulticloud):\n    _icon = \"azure-operator-nexus.png\"\n\n\nclass AzureOperatorServiceManager(_Hybridmulticloud):\n    _icon = \"azure-operator-service-manager.png\"\n\n\nclass AzureProgrammableConnectivity(_Hybridmulticloud):\n    _icon = \"azure-programmable-connectivity.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/identity.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Identity(_Azure):\n    _type = \"identity\"\n    _icon_dir = \"resources/azure/identity\"\n\n\nclass AadLicenses(_Identity):\n    _icon = \"aad-licenses.png\"\n\n\nclass AccessReview(_Identity):\n    _icon = \"access-review.png\"\n\n\nclass ActiveDirectoryConnectHealth(_Identity):\n    _icon = \"active-directory-connect-health.png\"\n\n\nclass ActiveDirectory(_Identity):\n    _icon = \"active-directory.png\"\n\n\nclass ADB2C(_Identity):\n    _icon = \"ad-b2c.png\"\n\n\nclass ADDomainServices(_Identity):\n    _icon = \"ad-domain-services.png\"\n\n\nclass ADIdentityProtection(_Identity):\n    _icon = \"ad-identity-protection.png\"\n\n\nclass ADPrivilegedIdentityManagement(_Identity):\n    _icon = \"ad-privileged-identity-management.png\"\n\n\nclass AdministrativeUnits(_Identity):\n    _icon = \"administrative-units.png\"\n\n\nclass APIProxy(_Identity):\n    _icon = \"api-proxy.png\"\n\n\nclass AppRegistrations(_Identity):\n    _icon = \"app-registrations.png\"\n\n\nclass AzureActiveDirectory(_Identity):\n    _icon = \"azure-active-directory.png\"\n\n\nclass AzureADB2C(_Identity):\n    _icon = \"azure-ad-b2c.png\"\n\n\nclass AzureADDomainServices(_Identity):\n    _icon = \"azure-ad-domain-services.png\"\n\n\nclass AzureADIdentityProtection(_Identity):\n    _icon = \"azure-ad-identity-protection.png\"\n\n\nclass AzureADPrivilegeIdentityManagement(_Identity):\n    _icon = \"azure-ad-privilege-identity-management.png\"\n\n\nclass AzureADPrivlegedIdentityManagement(_Identity):\n    _icon = \"azure-ad-privleged-identity-management.png\"\n\n\nclass AzureADRolesAndAdministrators(_Identity):\n    _icon = \"azure-ad-roles-and-administrators.png\"\n\n\nclass AzureInformationProtection(_Identity):\n    _icon = \"azure-information-protection.png\"\n\n\nclass ConditionalAccess(_Identity):\n    _icon = \"conditional-access.png\"\n\n\nclass CustomAzureADRoles(_Identity):\n    _icon = \"custom-azure-ad-roles.png\"\n\n\nclass EnterpriseApplications(_Identity):\n    _icon = \"enterprise-applications.png\"\n\n\nclass EntraConnect(_Identity):\n    _icon = \"entra-connect.png\"\n\n\nclass EntraDomainServices(_Identity):\n    _icon = \"entra-domain-services.png\"\n\n\nclass EntraIDProtection(_Identity):\n    _icon = \"entra-id-protection.png\"\n\n\nclass EntraManagedIdentities(_Identity):\n    _icon = \"entra-managed-identities.png\"\n\n\nclass EntraPrivlegedIdentityManagement(_Identity):\n    _icon = \"entra-privleged-identity-management.png\"\n\n\nclass EntraVerifiedID(_Identity):\n    _icon = \"entra-verified-id.png\"\n\n\nclass ExternalIdentities(_Identity):\n    _icon = \"external-identities.png\"\n\n\nclass GlobalSecureAccess(_Identity):\n    _icon = \"global-secure-access.png\"\n\n\nclass Groups(_Identity):\n    _icon = \"groups.png\"\n\n\nclass IdentityGovernance(_Identity):\n    _icon = \"identity-governance.png\"\n\n\nclass InformationProtection(_Identity):\n    _icon = \"information-protection.png\"\n\n\nclass InternetAccess(_Identity):\n    _icon = \"internet-access.png\"\n\n\nclass ManagedIdentities(_Identity):\n    _icon = \"managed-identities.png\"\n\n\nclass PrivateAccess(_Identity):\n    _icon = \"private-access.png\"\n\n\nclass Security(_Identity):\n    _icon = \"security.png\"\n\n\nclass TenantProperties(_Identity):\n    _icon = \"tenant-properties.png\"\n\n\nclass UserSettings(_Identity):\n    _icon = \"user-settings.png\"\n\n\nclass Users(_Identity):\n    _icon = \"users.png\"\n\n\nclass VerifiableCredentials(_Identity):\n    _icon = \"verifiable-credentials.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/integration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Integration(_Azure):\n    _type = \"integration\"\n    _icon_dir = \"resources/azure/integration\"\n\n\nclass APIConnections(_Integration):\n    _icon = \"api-connections.png\"\n\n\nclass APIForFhir(_Integration):\n    _icon = \"api-for-fhir.png\"\n\n\nclass APIManagementServices(_Integration):\n    _icon = \"api-management-services.png\"\n\n\nclass APIManagement(_Integration):\n    _icon = \"api-management.png\"\n\n\nclass AppConfiguration(_Integration):\n    _icon = \"app-configuration.png\"\n\n\nclass AzureAPIForFhir(_Integration):\n    _icon = \"azure-api-for-fhir.png\"\n\n\nclass AzureDataCatalog(_Integration):\n    _icon = \"azure-data-catalog.png\"\n\n\nclass AzureDataboxGateway(_Integration):\n    _icon = \"azure-databox-gateway.png\"\n\n\nclass AzureServiceBus(_Integration):\n    _icon = \"azure-service-bus.png\"\n\n\nclass AzureSQLServerStretchDatabases(_Integration):\n    _icon = \"azure-sql-server-stretch-databases.png\"\n\n\nclass AzureStackEdge(_Integration):\n    _icon = \"azure-stack-edge.png\"\n\n\nclass DataCatalog(_Integration):\n    _icon = \"data-catalog.png\"\n\n\nclass DataFactories(_Integration):\n    _icon = \"data-factories.png\"\n\n\nclass EventGridDomains(_Integration):\n    _icon = \"event-grid-domains.png\"\n\n\nclass EventGridSubscriptions(_Integration):\n    _icon = \"event-grid-subscriptions.png\"\n\n\nclass EventGridTopics(_Integration):\n    _icon = \"event-grid-topics.png\"\n\n\nclass IntegrationAccounts(_Integration):\n    _icon = \"integration-accounts.png\"\n\n\nclass IntegrationEnvironments(_Integration):\n    _icon = \"integration-environments.png\"\n\n\nclass IntegrationServiceEnvironments(_Integration):\n    _icon = \"integration-service-environments.png\"\n\n\nclass LogicAppsCustomConnector(_Integration):\n    _icon = \"logic-apps-custom-connector.png\"\n\n\nclass LogicApps(_Integration):\n    _icon = \"logic-apps.png\"\n\n\nclass PartnerNamespace(_Integration):\n    _icon = \"partner-namespace.png\"\n\n\nclass PartnerRegistration(_Integration):\n    _icon = \"partner-registration.png\"\n\n\nclass PartnerTopic(_Integration):\n    _icon = \"partner-topic.png\"\n\n\nclass PowerPlatform(_Integration):\n    _icon = \"power-platform.png\"\n\n\nclass Relays(_Integration):\n    _icon = \"relays.png\"\n\n\nclass SendgridAccounts(_Integration):\n    _icon = \"sendgrid-accounts.png\"\n\n\nclass ServiceBusRelays(_Integration):\n    _icon = \"service-bus-relays.png\"\n\n\nclass ServiceBus(_Integration):\n    _icon = \"service-bus.png\"\n\n\nclass ServiceCatalogManagedApplicationDefinitions(_Integration):\n    _icon = \"service-catalog-managed-application-definitions.png\"\n\n\nclass SoftwareAsAService(_Integration):\n    _icon = \"software-as-a-service.png\"\n\n\nclass SQLDataWarehouses(_Integration):\n    _icon = \"sql-data-warehouses.png\"\n\n\nclass StorsimpleDeviceManagers(_Integration):\n    _icon = \"storsimple-device-managers.png\"\n\n\nclass SystemTopic(_Integration):\n    _icon = \"system-topic.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/intune.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Intune(_Azure):\n    _type = \"intune\"\n    _icon_dir = \"resources/azure/intune\"\n\n\nclass AzureADRolesAndAdministrators(_Intune):\n    _icon = \"azure-ad-roles-and-administrators.png\"\n\n\nclass ClientApps(_Intune):\n    _icon = \"client-apps.png\"\n\n\nclass DeviceCompliance(_Intune):\n    _icon = \"device-compliance.png\"\n\n\nclass DeviceConfiguration(_Intune):\n    _icon = \"device-configuration.png\"\n\n\nclass DeviceEnrollment(_Intune):\n    _icon = \"device-enrollment.png\"\n\n\nclass DeviceSecurityApple(_Intune):\n    _icon = \"device-security-apple.png\"\n\n\nclass DeviceSecurityGoogle(_Intune):\n    _icon = \"device-security-google.png\"\n\n\nclass DeviceSecurityWindows(_Intune):\n    _icon = \"device-security-windows.png\"\n\n\nclass Devices(_Intune):\n    _icon = \"devices.png\"\n\n\nclass Ebooks(_Intune):\n    _icon = \"ebooks.png\"\n\n\nclass ExchangeAccess(_Intune):\n    _icon = \"exchange-access.png\"\n\n\nclass IntuneAppProtection(_Intune):\n    _icon = \"intune-app-protection.png\"\n\n\nclass IntuneForEducation(_Intune):\n    _icon = \"intune-for-education.png\"\n\n\nclass Intune(_Intune):\n    _icon = \"intune.png\"\n\n\nclass Mindaro(_Intune):\n    _icon = \"mindaro.png\"\n\n\nclass SecurityBaselines(_Intune):\n    _icon = \"security-baselines.png\"\n\n\nclass SoftwareUpdates(_Intune):\n    _icon = \"software-updates.png\"\n\n\nclass TenantStatus(_Intune):\n    _icon = \"tenant-status.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/iot.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Iot(_Azure):\n    _type = \"iot\"\n    _icon_dir = \"resources/azure/iot\"\n\n\nclass AzureCosmosDb(_Iot):\n    _icon = \"azure-cosmos-db.png\"\n\n\nclass AzureDataboxGateway(_Iot):\n    _icon = \"azure-databox-gateway.png\"\n\n\nclass AzureIotOperations(_Iot):\n    _icon = \"azure-iot-operations.png\"\n\n\nclass AzureMapsAccounts(_Iot):\n    _icon = \"azure-maps-accounts.png\"\n\n\nclass AzureStack(_Iot):\n    _icon = \"azure-stack.png\"\n\n\nclass DeviceProvisioningServices(_Iot):\n    _icon = \"device-provisioning-services.png\"\n\n\nclass DigitalTwins(_Iot):\n    _icon = \"digital-twins.png\"\n\n\nclass EventGridSubscriptions(_Iot):\n    _icon = \"event-grid-subscriptions.png\"\n\n\nclass EventHubClusters(_Iot):\n    _icon = \"event-hub-clusters.png\"\n\n\nclass EventHubs(_Iot):\n    _icon = \"event-hubs.png\"\n\n\nclass FunctionApps(_Iot):\n    _icon = \"function-apps.png\"\n\n\nclass IndustrialIot(_Iot):\n    _icon = \"industrial-iot.png\"\n\n\nclass IotCentralApplications(_Iot):\n    _icon = \"iot-central-applications.png\"\n\n\nclass IotEdge(_Iot):\n    _icon = \"iot-edge.png\"\n\n\nclass IotHubSecurity(_Iot):\n    _icon = \"iot-hub-security.png\"\n\n\nclass IotHub(_Iot):\n    _icon = \"iot-hub.png\"\n\n\nclass LogicApps(_Iot):\n    _icon = \"logic-apps.png\"\n\n\nclass MachineLearningStudioClassicWebServices(_Iot):\n    _icon = \"machine-learning-studio-classic-web-services.png\"\n\n\nclass MachineLearningStudioWebServicePlans(_Iot):\n    _icon = \"machine-learning-studio-web-service-plans.png\"\n\n\nclass MachineLearningStudioWorkspaces(_Iot):\n    _icon = \"machine-learning-studio-workspaces.png\"\n\n\nclass Maps(_Iot):\n    _icon = \"maps.png\"\n\n\nclass NotificationHubNamespaces(_Iot):\n    _icon = \"notification-hub-namespaces.png\"\n\n\nclass NotificationHubs(_Iot):\n    _icon = \"notification-hubs.png\"\n\n\nclass Sphere(_Iot):\n    _icon = \"sphere.png\"\n\n\nclass StackHciPremium(_Iot):\n    _icon = \"stack-hci-premium.png\"\n\n\nclass StreamAnalyticsJobs(_Iot):\n    _icon = \"stream-analytics-jobs.png\"\n\n\nclass TimeSeriesDataSets(_Iot):\n    _icon = \"time-series-data-sets.png\"\n\n\nclass TimeSeriesInsightsAccessPolicies(_Iot):\n    _icon = \"time-series-insights-access-policies.png\"\n\n\nclass TimeSeriesInsightsEnvironments(_Iot):\n    _icon = \"time-series-insights-environments.png\"\n\n\nclass TimeSeriesInsightsEventSources(_Iot):\n    _icon = \"time-series-insights-event-sources.png\"\n\n\nclass TimeSeriesInsightsEventsSources(_Iot):\n    _icon = \"time-series-insights-events-sources.png\"\n\n\nclass Windows10IotCoreServices(_Iot):\n    _icon = \"windows-10-iot-core-services.png\"\n\n\nclass Windows10CoreServices(_Iot):\n    _icon = \"windows10-core-services.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/managementgovernance.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Managementgovernance(_Azure):\n    _type = \"managementgovernance\"\n    _icon_dir = \"resources/azure/managementgovernance\"\n\n\nclass ActivityLog(_Managementgovernance):\n    _icon = \"activity-log.png\"\n\n\nclass Advisor(_Managementgovernance):\n    _icon = \"advisor.png\"\n\n\nclass Alerts(_Managementgovernance):\n    _icon = \"alerts.png\"\n\n\nclass ApplicationInsights(_Managementgovernance):\n    _icon = \"application-insights.png\"\n\n\nclass ArcMachines(_Managementgovernance):\n    _icon = \"arc-machines.png\"\n\n\nclass AutomationAccounts(_Managementgovernance):\n    _icon = \"automation-accounts.png\"\n\n\nclass AzureArc(_Managementgovernance):\n    _icon = \"azure-arc.png\"\n\n\nclass AzureLighthouse(_Managementgovernance):\n    _icon = \"azure-lighthouse.png\"\n\n\nclass Blueprints(_Managementgovernance):\n    _icon = \"blueprints.png\"\n\n\nclass Compliance(_Managementgovernance):\n    _icon = \"compliance.png\"\n\n\nclass CostManagementAndBilling(_Managementgovernance):\n    _icon = \"cost-management-and-billing.png\"\n\n\nclass CustomerLockboxForMicrosoftAzure(_Managementgovernance):\n    _icon = \"customer-lockbox-for-microsoft-azure.png\"\n\n\nclass DiagnosticsSettings(_Managementgovernance):\n    _icon = \"diagnostics-settings.png\"\n\n\nclass Education(_Managementgovernance):\n    _icon = \"education.png\"\n\n\nclass IntuneTrends(_Managementgovernance):\n    _icon = \"intune-trends.png\"\n\n\nclass LogAnalyticsWorkspaces(_Managementgovernance):\n    _icon = \"log-analytics-workspaces.png\"\n\n\nclass Machinesazurearc(_Managementgovernance):\n    _icon = \"machinesazurearc.png\"\n\n\nclass ManagedApplicationsCenter(_Managementgovernance):\n    _icon = \"managed-applications-center.png\"\n\n\nclass ManagedDesktop(_Managementgovernance):\n    _icon = \"managed-desktop.png\"\n\n\nclass Metrics(_Managementgovernance):\n    _icon = \"metrics.png\"\n\n\nclass Monitor(_Managementgovernance):\n    _icon = \"monitor.png\"\n\n\nclass MyCustomers(_Managementgovernance):\n    _icon = \"my-customers.png\"\n\n\nclass OperationLogClassic(_Managementgovernance):\n    _icon = \"operation-log-classic.png\"\n\n\nclass Policy(_Managementgovernance):\n    _icon = \"policy.png\"\n\n\nclass RecoveryServicesVaults(_Managementgovernance):\n    _icon = \"recovery-services-vaults.png\"\n\n\nclass ResourceGraphExplorer(_Managementgovernance):\n    _icon = \"resource-graph-explorer.png\"\n\n\nclass ResourcesProvider(_Managementgovernance):\n    _icon = \"resources-provider.png\"\n\n\nclass SchedulerJobCollections(_Managementgovernance):\n    _icon = \"scheduler-job-collections.png\"\n\n\nclass ServiceCatalogMad(_Managementgovernance):\n    _icon = \"service-catalog-mad.png\"\n\n\nclass ServiceProviders(_Managementgovernance):\n    _icon = \"service-providers.png\"\n\n\nclass Solutions(_Managementgovernance):\n    _icon = \"solutions.png\"\n\n\nclass UniversalPrint(_Managementgovernance):\n    _icon = \"universal-print.png\"\n\n\nclass UserPrivacy(_Managementgovernance):\n    _icon = \"user-privacy.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/menu.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Menu(_Azure):\n    _type = \"menu\"\n    _icon_dir = \"resources/azure/menu\"\n\n\nclass Keys(_Menu):\n    _icon = \"keys.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/migrate.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Migrate(_Azure):\n    _type = \"migrate\"\n    _icon_dir = \"resources/azure/migrate\"\n\n\nclass AzureDataboxGateway(_Migrate):\n    _icon = \"azure-databox-gateway.png\"\n\n\nclass AzureMigrate(_Migrate):\n    _icon = \"azure-migrate.png\"\n\n\nclass AzureStackEdge(_Migrate):\n    _icon = \"azure-stack-edge.png\"\n\n\nclass CostManagementAndBilling(_Migrate):\n    _icon = \"cost-management-and-billing.png\"\n\n\nclass DataBox(_Migrate):\n    _icon = \"data-box.png\"\n\n\nclass RecoveryServicesVaults(_Migrate):\n    _icon = \"recovery-services-vaults.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/migration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Migration(_Azure):\n    _type = \"migration\"\n    _icon_dir = \"resources/azure/migration\"\n\n\nclass AzureDatabaseMigrationServices(_Migration):\n    _icon = \"azure-database-migration-services.png\"\n\n\nclass DataBoxEdge(_Migration):\n    _icon = \"data-box-edge.png\"\n\n\nclass DataBox(_Migration):\n    _icon = \"data-box.png\"\n\n\nclass DatabaseMigrationServices(_Migration):\n    _icon = \"database-migration-services.png\"\n\n\nclass MigrationProjects(_Migration):\n    _icon = \"migration-projects.png\"\n\n\nclass RecoveryServicesVaults(_Migration):\n    _icon = \"recovery-services-vaults.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/mixedreality.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Mixedreality(_Azure):\n    _type = \"mixedreality\"\n    _icon_dir = \"resources/azure/mixedreality\"\n\n\nclass RemoteRendering(_Mixedreality):\n    _icon = \"remote-rendering.png\"\n\n\nclass SpatialAnchorAccounts(_Mixedreality):\n    _icon = \"spatial-anchor-accounts.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/ml.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Ml(_Azure):\n    _type = \"ml\"\n    _icon_dir = \"resources/azure/ml\"\n\n\nclass AzureOpenAI(_Ml):\n    _icon = \"azure-open-ai.png\"\n\n\nclass AzureSpeechService(_Ml):\n    _icon = \"azure-speech-service.png\"\n\n\nclass BatchAI(_Ml):\n    _icon = \"batch-ai.png\"\n\n\nclass BotServices(_Ml):\n    _icon = \"bot-services.png\"\n\n\nclass CognitiveServices(_Ml):\n    _icon = \"cognitive-services.png\"\n\n\nclass GenomicsAccounts(_Ml):\n    _icon = \"genomics-accounts.png\"\n\n\nclass MachineLearningServiceWorkspaces(_Ml):\n    _icon = \"machine-learning-service-workspaces.png\"\n\n\nclass MachineLearningStudioWebServicePlans(_Ml):\n    _icon = \"machine-learning-studio-web-service-plans.png\"\n\n\nclass MachineLearningStudioWebServices(_Ml):\n    _icon = \"machine-learning-studio-web-services.png\"\n\n\nclass MachineLearningStudioWorkspaces(_Ml):\n    _icon = \"machine-learning-studio-workspaces.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/mobile.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Mobile(_Azure):\n    _type = \"mobile\"\n    _icon_dir = \"resources/azure/mobile\"\n\n\nclass AppServiceMobile(_Mobile):\n    _icon = \"app-service-mobile.png\"\n\n\nclass AppServices(_Mobile):\n    _icon = \"app-services.png\"\n\n\nclass MobileEngagement(_Mobile):\n    _icon = \"mobile-engagement.png\"\n\n\nclass NotificationHubs(_Mobile):\n    _icon = \"notification-hubs.png\"\n\n\nclass PowerPlatform(_Mobile):\n    _icon = \"power-platform.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/monitor.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Monitor(_Azure):\n    _type = \"monitor\"\n    _icon_dir = \"resources/azure/monitor\"\n\n\nclass ActivityLog(_Monitor):\n    _icon = \"activity-log.png\"\n\n\nclass ApplicationInsights(_Monitor):\n    _icon = \"application-insights.png\"\n\n\nclass AutoScale(_Monitor):\n    _icon = \"auto-scale.png\"\n\n\nclass AzureMonitorsForSAPSolutions(_Monitor):\n    _icon = \"azure-monitors-for-sap-solutions.png\"\n\n\nclass AzureWorkbooks(_Monitor):\n    _icon = \"azure-workbooks.png\"\n\n\nclass ChangeAnalysis(_Monitor):\n    _icon = \"change-analysis.png\"\n\n\nclass DiagnosticsSettings(_Monitor):\n    _icon = \"diagnostics-settings.png\"\n\n\nclass LogAnalyticsWorkspaces(_Monitor):\n    _icon = \"log-analytics-workspaces.png\"\n\n\nclass Logs(_Monitor):\n    _icon = \"logs.png\"\n\n\nclass Metrics(_Monitor):\n    _icon = \"metrics.png\"\n\n\nclass Monitor(_Monitor):\n    _icon = \"monitor.png\"\n\n\nclass NetworkWatcher(_Monitor):\n    _icon = \"network-watcher.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Network(_Azure):\n    _type = \"network\"\n    _icon_dir = \"resources/azure/network\"\n\n\nclass ApplicationGateway(_Network):\n    _icon = \"application-gateway.png\"\n\n\nclass ApplicationSecurityGroups(_Network):\n    _icon = \"application-security-groups.png\"\n\n\nclass CDNProfiles(_Network):\n    _icon = \"cdn-profiles.png\"\n\n\nclass Connections(_Network):\n    _icon = \"connections.png\"\n\n\nclass DDOSProtectionPlans(_Network):\n    _icon = \"ddos-protection-plans.png\"\n\n\nclass DNSPrivateZones(_Network):\n    _icon = \"dns-private-zones.png\"\n\n\nclass DNSZones(_Network):\n    _icon = \"dns-zones.png\"\n\n\nclass ExpressrouteCircuits(_Network):\n    _icon = \"expressroute-circuits.png\"\n\n\nclass Firewall(_Network):\n    _icon = \"firewall.png\"\n\n\nclass FrontDoors(_Network):\n    _icon = \"front-doors.png\"\n\n\nclass LoadBalancers(_Network):\n    _icon = \"load-balancers.png\"\n\n\nclass LocalNetworkGateways(_Network):\n    _icon = \"local-network-gateways.png\"\n\n\nclass NetworkInterfaces(_Network):\n    _icon = \"network-interfaces.png\"\n\n\nclass NetworkSecurityGroupsClassic(_Network):\n    _icon = \"network-security-groups-classic.png\"\n\n\nclass NetworkWatcher(_Network):\n    _icon = \"network-watcher.png\"\n\n\nclass OnPremisesDataGateways(_Network):\n    _icon = \"on-premises-data-gateways.png\"\n\n\nclass PrivateEndpoint(_Network):\n    _icon = \"private-endpoint.png\"\n\n\nclass PublicIpAddresses(_Network):\n    _icon = \"public-ip-addresses.png\"\n\n\nclass ReservedIpAddressesClassic(_Network):\n    _icon = \"reserved-ip-addresses-classic.png\"\n\n\nclass RouteFilters(_Network):\n    _icon = \"route-filters.png\"\n\n\nclass RouteTables(_Network):\n    _icon = \"route-tables.png\"\n\n\nclass ServiceEndpointPolicies(_Network):\n    _icon = \"service-endpoint-policies.png\"\n\n\nclass Subnets(_Network):\n    _icon = \"subnets.png\"\n\n\nclass TrafficManagerProfiles(_Network):\n    _icon = \"traffic-manager-profiles.png\"\n\n\nclass VirtualNetworkClassic(_Network):\n    _icon = \"virtual-network-classic.png\"\n\n\nclass VirtualNetworkGateways(_Network):\n    _icon = \"virtual-network-gateways.png\"\n\n\nclass VirtualNetworks(_Network):\n    _icon = \"virtual-networks.png\"\n\n\nclass VirtualWans(_Network):\n    _icon = \"virtual-wans.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/networking.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Networking(_Azure):\n    _type = \"networking\"\n    _icon_dir = \"resources/azure/networking\"\n\n\nclass ApplicationGateways(_Networking):\n    _icon = \"application-gateways.png\"\n\n\nclass AtmMultistack(_Networking):\n    _icon = \"atm-multistack.png\"\n\n\nclass AzureCommunicationsGateway(_Networking):\n    _icon = \"azure-communications-gateway.png\"\n\n\nclass AzureFirewallManager(_Networking):\n    _icon = \"azure-firewall-manager.png\"\n\n\nclass AzureFirewallPolicy(_Networking):\n    _icon = \"azure-firewall-policy.png\"\n\n\nclass Bastions(_Networking):\n    _icon = \"bastions.png\"\n\n\nclass CDNProfiles(_Networking):\n    _icon = \"cdn-profiles.png\"\n\n\nclass ConnectedCache(_Networking):\n    _icon = \"connected-cache.png\"\n\n\nclass Connections(_Networking):\n    _icon = \"connections.png\"\n\n\nclass DDOSProtectionPlans(_Networking):\n    _icon = \"ddos-protection-plans.png\"\n\n\nclass DNSMultistack(_Networking):\n    _icon = \"dns-multistack.png\"\n\n\nclass DNSPrivateResolver(_Networking):\n    _icon = \"dns-private-resolver.png\"\n\n\nclass DNSSecurityPolicy(_Networking):\n    _icon = \"dns-security-policy.png\"\n\n\nclass DNSZones(_Networking):\n    _icon = \"dns-zones.png\"\n\n\nclass ExpressrouteCircuits(_Networking):\n    _icon = \"expressroute-circuits.png\"\n\n\nclass Firewalls(_Networking):\n    _icon = \"firewalls.png\"\n\n\nclass FrontDoorAndCDNProfiles(_Networking):\n    _icon = \"front-door-and-cdn-profiles.png\"\n\n\nclass IpAddressManager(_Networking):\n    _icon = \"ip-address-manager.png\"\n\n\nclass IpGroups(_Networking):\n    _icon = \"ip-groups.png\"\n\n\nclass LoadBalancerHub(_Networking):\n    _icon = \"load-balancer-hub.png\"\n\n\nclass LoadBalancers(_Networking):\n    _icon = \"load-balancers.png\"\n\n\nclass LocalNetworkGateways(_Networking):\n    _icon = \"local-network-gateways.png\"\n\n\nclass Nat(_Networking):\n    _icon = \"nat.png\"\n\n\nclass NetworkInterfaces(_Networking):\n    _icon = \"network-interfaces.png\"\n\n\nclass NetworkSecurityGroups(_Networking):\n    _icon = \"network-security-groups.png\"\n\n\nclass NetworkWatcher(_Networking):\n    _icon = \"network-watcher.png\"\n\n\nclass OnPremisesDataGateways(_Networking):\n    _icon = \"on-premises-data-gateways.png\"\n\n\nclass PrivateLinkService(_Networking):\n    _icon = \"private-link-service.png\"\n\n\nclass PrivateLinkServices(_Networking):\n    _icon = \"private-link-services.png\"\n\n\nclass PrivateLink(_Networking):\n    _icon = \"private-link.png\"\n\n\nclass ProximityPlacementGroups(_Networking):\n    _icon = \"proximity-placement-groups.png\"\n\n\nclass PublicIpAddressesClassic(_Networking):\n    _icon = \"public-ip-addresses-classic.png\"\n\n\nclass PublicIpAddresses(_Networking):\n    _icon = \"public-ip-addresses.png\"\n\n\nclass PublicIpPrefixes(_Networking):\n    _icon = \"public-ip-prefixes.png\"\n\n\nclass ReservedIpAddressesClassic(_Networking):\n    _icon = \"reserved-ip-addresses-classic.png\"\n\n\nclass ResourceManagementPrivateLink(_Networking):\n    _icon = \"resource-management-private-link.png\"\n\n\nclass RouteFilters(_Networking):\n    _icon = \"route-filters.png\"\n\n\nclass RouteTables(_Networking):\n    _icon = \"route-tables.png\"\n\n\nclass ServiceEndpointPolicies(_Networking):\n    _icon = \"service-endpoint-policies.png\"\n\n\nclass SpotVM(_Networking):\n    _icon = \"spot-vm.png\"\n\n\nclass SpotVmss(_Networking):\n    _icon = \"spot-vmss.png\"\n\n\nclass Subnet(_Networking):\n    _icon = \"subnet.png\"\n\n\nclass TrafficController(_Networking):\n    _icon = \"traffic-controller.png\"\n\n\nclass TrafficManagerProfiles(_Networking):\n    _icon = \"traffic-manager-profiles.png\"\n\n\nclass VirtualNetworkGateways(_Networking):\n    _icon = \"virtual-network-gateways.png\"\n\n\nclass VirtualNetworksClassic(_Networking):\n    _icon = \"virtual-networks-classic.png\"\n\n\nclass VirtualNetworks(_Networking):\n    _icon = \"virtual-networks.png\"\n\n\nclass VirtualRouter(_Networking):\n    _icon = \"virtual-router.png\"\n\n\nclass VirtualWanHub(_Networking):\n    _icon = \"virtual-wan-hub.png\"\n\n\nclass VirtualWans(_Networking):\n    _icon = \"virtual-wans.png\"\n\n\nclass WebApplicationFirewallPolicieswaf(_Networking):\n    _icon = \"web-application-firewall-policieswaf.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/newicons.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Newicons(_Azure):\n    _type = \"newicons\"\n    _icon_dir = \"resources/azure/newicons\"\n\n\nclass AzureSustainability(_Newicons):\n    _icon = \"azure-sustainability.png\"\n\n\nclass ConnectedVehiclePlatform(_Newicons):\n    _icon = \"connected-vehicle-platform.png\"\n\n\nclass EntraConnectHealth(_Newicons):\n    _icon = \"entra-connect-health.png\"\n\n\nclass EntraConnectSync(_Newicons):\n    _icon = \"entra-connect-sync.png\"\n\n\nclass IcmTroubleshooting(_Newicons):\n    _icon = \"icm-troubleshooting.png\"\n\n\nclass Osconfig(_Newicons):\n    _icon = \"osconfig.png\"\n\n\nclass StorageActions(_Newicons):\n    _icon = \"storage-actions.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/other.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Other(_Azure):\n    _type = \"other\"\n    _icon_dir = \"resources/azure/other\"\n\n\nclass AadLicenses(_Other):\n    _icon = \"aad-licenses.png\"\n\n\nclass AksIstio(_Other):\n    _icon = \"aks-istio.png\"\n\n\nclass AppComplianceAutomation(_Other):\n    _icon = \"app-compliance-automation.png\"\n\n\nclass AppRegistrations(_Other):\n    _icon = \"app-registrations.png\"\n\n\nclass Aquila(_Other):\n    _icon = \"aquila.png\"\n\n\nclass ArcDataServices(_Other):\n    _icon = \"arc-data-services.png\"\n\n\nclass ArcKubernetes(_Other):\n    _icon = \"arc-kubernetes.png\"\n\n\nclass ArcPostgresql(_Other):\n    _icon = \"arc-postgresql-.png\"\n\n\nclass ArcSQLManagedInstance(_Other):\n    _icon = \"arc-sql-managed-instance.png\"\n\n\nclass ArcSQLServer(_Other):\n    _icon = \"arc-sql-server.png\"\n\n\nclass AvsVM(_Other):\n    _icon = \"avs-vm.png\"\n\n\nclass AzureA(_Other):\n    _icon = \"azure-a.png\"\n\n\nclass AzureBackupCenter(_Other):\n    _icon = \"azure-backup-center.png\"\n\n\nclass AzureCenterForSAP(_Other):\n    _icon = \"azure-center-for-sap.png\"\n\n\nclass AzureChaosStudio(_Other):\n    _icon = \"azure-chaos-studio.png\"\n\n\nclass AzureCloudShell(_Other):\n    _icon = \"azure-cloud-shell.png\"\n\n\nclass AzureCommunicationServices(_Other):\n    _icon = \"azure-communication-services.png\"\n\n\nclass AzureComputeGalleries(_Other):\n    _icon = \"azure-compute-galleries.png\"\n\n\nclass AzureDeploymentEnvironments(_Other):\n    _icon = \"azure-deployment-environments.png\"\n\n\nclass AzureDevTunnels(_Other):\n    _icon = \"azure-dev-tunnels.png\"\n\n\nclass AzureEdgeHardwareCenter(_Other):\n    _icon = \"azure-edge-hardware-center.png\"\n\n\nclass AzureHpcWorkbenches(_Other):\n    _icon = \"azure-hpc-workbenches.png\"\n\n\nclass AzureLoadTesting(_Other):\n    _icon = \"azure-load-testing.png\"\n\n\nclass AzureManagedGrafana(_Other):\n    _icon = \"azure-managed-grafana.png\"\n\n\nclass AzureMonitorDashboard(_Other):\n    _icon = \"azure-monitor-dashboard.png\"\n\n\nclass AzureNetworkFunctionManagerFunctions(_Other):\n    _icon = \"azure-network-function-manager-functions.png\"\n\n\nclass AzureNetworkFunctionManager(_Other):\n    _icon = \"azure-network-function-manager.png\"\n\n\nclass AzureOrbital(_Other):\n    _icon = \"azure-orbital.png\"\n\n\nclass AzureQuotas(_Other):\n    _icon = \"azure-quotas.png\"\n\n\nclass AzureSphere(_Other):\n    _icon = \"azure-sphere.png\"\n\n\nclass AzureStorageMover(_Other):\n    _icon = \"azure-storage-mover.png\"\n\n\nclass AzureSupportCenterBlue(_Other):\n    _icon = \"azure-support-center-blue.png\"\n\n\nclass AzureVideoIndexer(_Other):\n    _icon = \"azure-video-indexer.png\"\n\n\nclass AzureVirtualDesktop(_Other):\n    _icon = \"azure-virtual-desktop.png\"\n\n\nclass AzureVmwareSolution(_Other):\n    _icon = \"azure-vmware-solution.png\"\n\n\nclass Azureattestation(_Other):\n    _icon = \"azureattestation.png\"\n\n\nclass Azurite(_Other):\n    _icon = \"azurite.png\"\n\n\nclass BackupVault(_Other):\n    _icon = \"backup-vault.png\"\n\n\nclass BareMetalInfrastructure(_Other):\n    _icon = \"bare-metal-infrastructure.png\"\n\n\nclass CapacityReservationGroups(_Other):\n    _icon = \"capacity-reservation-groups.png\"\n\n\nclass CentralServiceInstanceForSAP(_Other):\n    _icon = \"central-service-instance-for-sap.png\"\n\n\nclass Ceres(_Other):\n    _icon = \"ceres.png\"\n\n\nclass CloudServicesExtendedSupport(_Other):\n    _icon = \"cloud-services-extended-support.png\"\n\n\nclass CommunityImages(_Other):\n    _icon = \"community-images.png\"\n\n\nclass ComplianceCenter(_Other):\n    _icon = \"compliance-center.png\"\n\n\nclass ConfidentialLedgers(_Other):\n    _icon = \"confidential-ledgers.png\"\n\n\nclass ContainerAppsEnvironments(_Other):\n    _icon = \"container-apps-environments.png\"\n\n\nclass CostExport(_Other):\n    _icon = \"cost-export.png\"\n\n\nclass CustomIpPrefix(_Other):\n    _icon = \"custom-ip-prefix.png\"\n\n\nclass DashboardHub(_Other):\n    _icon = \"dashboard-hub.png\"\n\n\nclass DataCollectionRules(_Other):\n    _icon = \"data-collection-rules.png\"\n\n\nclass DatabaseInstanceForSAP(_Other):\n    _icon = \"database-instance-for-sap.png\"\n\n\nclass DedicatedHsm(_Other):\n    _icon = \"dedicated-hsm.png\"\n\n\nclass DefenderCmLocalManager(_Other):\n    _icon = \"defender-cm-local-manager.png\"\n\n\nclass DefenderDcsController(_Other):\n    _icon = \"defender-dcs-controller.png\"\n\n\nclass DefenderDistributerControlSystem(_Other):\n    _icon = \"defender-distributer-control-system.png\"\n\n\nclass DefenderEngineeringStation(_Other):\n    _icon = \"defender-engineering-station.png\"\n\n\nclass DefenderExternalManagement(_Other):\n    _icon = \"defender-external-management.png\"\n\n\nclass DefenderFreezerMonitor(_Other):\n    _icon = \"defender-freezer-monitor.png\"\n\n\nclass DefenderHistorian(_Other):\n    _icon = \"defender-historian.png\"\n\n\nclass DefenderHmi(_Other):\n    _icon = \"defender-hmi.png\"\n\n\nclass DefenderIndustrialPackagingSystem(_Other):\n    _icon = \"defender-industrial-packaging-system.png\"\n\n\nclass DefenderIndustrialPrinter(_Other):\n    _icon = \"defender-industrial-printer.png\"\n\n\nclass DefenderIndustrialRobot(_Other):\n    _icon = \"defender-industrial-robot.png\"\n\n\nclass DefenderIndustrialScaleSystem(_Other):\n    _icon = \"defender-industrial-scale-system.png\"\n\n\nclass DefenderMarquee(_Other):\n    _icon = \"defender-marquee.png\"\n\n\nclass DefenderMeter(_Other):\n    _icon = \"defender-meter.png\"\n\n\nclass DefenderPlc(_Other):\n    _icon = \"defender-plc.png\"\n\n\nclass DefenderPneumaticDevice(_Other):\n    _icon = \"defender-pneumatic-device.png\"\n\n\nclass DefenderProgramableBoard(_Other):\n    _icon = \"defender-programable-board.png\"\n\n\nclass DefenderRelay(_Other):\n    _icon = \"defender-relay.png\"\n\n\nclass DefenderRobotController(_Other):\n    _icon = \"defender-robot-controller.png\"\n\n\nclass DefenderRtu(_Other):\n    _icon = \"defender-rtu.png\"\n\n\nclass DefenderSensor(_Other):\n    _icon = \"defender-sensor.png\"\n\n\nclass DefenderSlot(_Other):\n    _icon = \"defender-slot.png\"\n\n\nclass DefenderWebGuidingSystem(_Other):\n    _icon = \"defender-web-guiding-system.png\"\n\n\nclass DeviceUpdateIotHub(_Other):\n    _icon = \"device-update-iot-hub.png\"\n\n\nclass DiskPool(_Other):\n    _icon = \"disk-pool.png\"\n\n\nclass EdgeManagement(_Other):\n    _icon = \"edge-management.png\"\n\n\nclass ElasticSan(_Other):\n    _icon = \"elastic-san.png\"\n\n\nclass ExchangeOnPremisesAccess(_Other):\n    _icon = \"exchange-on-premises-access.png\"\n\n\nclass ExpressRouteTrafficCollector(_Other):\n    _icon = \"express-route-traffic-collector.png\"\n\n\nclass ExpressrouteDirect(_Other):\n    _icon = \"expressroute-direct.png\"\n\n\nclass FhirService(_Other):\n    _icon = \"fhir-service.png\"\n\n\nclass Fiji(_Other):\n    _icon = \"fiji.png\"\n\n\nclass HdiAksCluster(_Other):\n    _icon = \"hdi-aks-cluster.png\"\n\n\nclass InstancePools(_Other):\n    _icon = \"instance-pools.png\"\n\n\nclass InternetAnalyzerProfiles(_Other):\n    _icon = \"internet-analyzer-profiles.png\"\n\n\nclass KubernetesFleetManager(_Other):\n    _icon = \"kubernetes-fleet-manager.png\"\n\n\nclass LocalNetworkGateways(_Other):\n    _icon = \"local-network-gateways.png\"\n\n\nclass LogAnalyticsQueryPack(_Other):\n    _icon = \"log-analytics-query-pack.png\"\n\n\nclass ManagedInstanceApacheCassandra(_Other):\n    _icon = \"managed-instance-apache-cassandra.png\"\n\n\nclass MedtechService(_Other):\n    _icon = \"medtech-service.png\"\n\n\nclass MicrosoftDevBox(_Other):\n    _icon = \"microsoft-dev-box.png\"\n\n\nclass MissionLandingZone(_Other):\n    _icon = \"mission-landing-zone.png\"\n\n\nclass MobileNetworks(_Other):\n    _icon = \"mobile-networks.png\"\n\n\nclass ModularDataCenter(_Other):\n    _icon = \"modular-data-center.png\"\n\n\nclass NetworkManagers(_Other):\n    _icon = \"network-managers.png\"\n\n\nclass NetworkSecurityPerimeters(_Other):\n    _icon = \"network-security-perimeters.png\"\n\n\nclass OpenSupplyChainPlatform(_Other):\n    _icon = \"open-supply-chain-platform.png\"\n\n\nclass PeeringService(_Other):\n    _icon = \"peering-service.png\"\n\n\nclass Peerings(_Other):\n    _icon = \"peerings.png\"\n\n\nclass PrivateEndpoints(_Other):\n    _icon = \"private-endpoints.png\"\n\n\nclass ReservedCapacity(_Other):\n    _icon = \"reserved-capacity.png\"\n\n\nclass ResourceGuard(_Other):\n    _icon = \"resource-guard.png\"\n\n\nclass ResourceMover(_Other):\n    _icon = \"resource-mover.png\"\n\n\nclass Rtos(_Other):\n    _icon = \"rtos.png\"\n\n\nclass SavingsPlans(_Other):\n    _icon = \"savings-plans.png\"\n\n\nclass ScvmmManagementServers(_Other):\n    _icon = \"scvmm-management-servers.png\"\n\n\nclass SonicDash(_Other):\n    _icon = \"sonic-dash.png\"\n\n\nclass SshKeys(_Other):\n    _icon = \"ssh-keys.png\"\n\n\nclass StorageFunctions(_Other):\n    _icon = \"storage-functions.png\"\n\n\nclass TargetsManagement(_Other):\n    _icon = \"targets-management.png\"\n\n\nclass TemplateSpecs(_Other):\n    _icon = \"template-specs.png\"\n\n\nclass TestBase(_Other):\n    _icon = \"test-base.png\"\n\n\nclass UpdateManagementCenter(_Other):\n    _icon = \"update-management-center.png\"\n\n\nclass VideoAnalyzers(_Other):\n    _icon = \"video-analyzers.png\"\n\n\nclass VirtualEnclaves(_Other):\n    _icon = \"virtual-enclaves.png\"\n\n\nclass VirtualInstanceForSAP(_Other):\n    _icon = \"virtual-instance-for-sap.png\"\n\n\nclass VirtualVisitsBuilder(_Other):\n    _icon = \"virtual-visits-builder.png\"\n\n\nclass VMAppDefinitions(_Other):\n    _icon = \"vm-app-definitions.png\"\n\n\nclass VMAppVersions(_Other):\n    _icon = \"vm-app-versions.png\"\n\n\nclass VMImageVersion(_Other):\n    _icon = \"vm-image-version.png\"\n\n\nclass Wac(_Other):\n    _icon = \"wac.png\"\n\n\nclass WebAppDatabase(_Other):\n    _icon = \"web-app-database.png\"\n\n\nclass WebJobs(_Other):\n    _icon = \"web-jobs.png\"\n\n\nclass WindowsNotificationServices(_Other):\n    _icon = \"windows-notification-services.png\"\n\n\nclass WorkerContainerApp(_Other):\n    _icon = \"worker-container-app.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Security(_Azure):\n    _type = \"security\"\n    _icon_dir = \"resources/azure/security\"\n\n\nclass ApplicationSecurityGroups(_Security):\n    _icon = \"application-security-groups.png\"\n\n\nclass AzureADAuthenticationMethods(_Security):\n    _icon = \"azure-ad-authentication-methods.png\"\n\n\nclass AzureADIdentityProtection(_Security):\n    _icon = \"azure-ad-identity-protection.png\"\n\n\nclass AzureADPrivlegedIdentityManagement(_Security):\n    _icon = \"azure-ad-privleged-identity-management.png\"\n\n\nclass AzureADRiskySignins(_Security):\n    _icon = \"azure-ad-risky-signins.png\"\n\n\nclass AzureADRiskyUsers(_Security):\n    _icon = \"azure-ad-risky-users.png\"\n\n\nclass AzureInformationProtection(_Security):\n    _icon = \"azure-information-protection.png\"\n\n\nclass AzureSentinel(_Security):\n    _icon = \"azure-sentinel.png\"\n\n\nclass ConditionalAccess(_Security):\n    _icon = \"conditional-access.png\"\n\n\nclass Defender(_Security):\n    _icon = \"defender.png\"\n\n\nclass Detonation(_Security):\n    _icon = \"detonation.png\"\n\n\nclass ExtendedSecurityUpdates(_Security):\n    _icon = \"extended-security-updates.png\"\n\n\nclass Extendedsecurityupdates(_Security):\n    _icon = \"extendedsecurityupdates.png\"\n\n\nclass IdentitySecureScore(_Security):\n    _icon = \"identity-secure-score.png\"\n\n\nclass KeyVaults(_Security):\n    _icon = \"key-vaults.png\"\n\n\nclass MicrosoftDefenderEasm(_Security):\n    _icon = \"microsoft-defender-easm.png\"\n\n\nclass MicrosoftDefenderForCloud(_Security):\n    _icon = \"microsoft-defender-for-cloud.png\"\n\n\nclass MicrosoftDefenderForIot(_Security):\n    _icon = \"microsoft-defender-for-iot.png\"\n\n\nclass MultifactorAuthentication(_Security):\n    _icon = \"multifactor-authentication.png\"\n\n\nclass SecurityCenter(_Security):\n    _icon = \"security-center.png\"\n\n\nclass Sentinel(_Security):\n    _icon = \"sentinel.png\"\n\n\nclass UserSettings(_Security):\n    _icon = \"user-settings.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Storage(_Azure):\n    _type = \"storage\"\n    _icon_dir = \"resources/azure/storage\"\n\n\nclass ArchiveStorage(_Storage):\n    _icon = \"archive-storage.png\"\n\n\nclass AzureDataboxGateway(_Storage):\n    _icon = \"azure-databox-gateway.png\"\n\n\nclass AzureFileshares(_Storage):\n    _icon = \"azure-fileshares.png\"\n\n\nclass AzureHcpCache(_Storage):\n    _icon = \"azure-hcp-cache.png\"\n\n\nclass AzureNetappFiles(_Storage):\n    _icon = \"azure-netapp-files.png\"\n\n\nclass AzureStackEdge(_Storage):\n    _icon = \"azure-stack-edge.png\"\n\n\nclass Azurefxtedgefiler(_Storage):\n    _icon = \"azurefxtedgefiler.png\"\n\n\nclass BlobStorage(_Storage):\n    _icon = \"blob-storage.png\"\n\n\nclass DataBoxEdgeDataBoxGateway(_Storage):\n    _icon = \"data-box-edge-data-box-gateway.png\"\n\n\nclass DataBox(_Storage):\n    _icon = \"data-box.png\"\n\n\nclass DataLakeStorageGen1(_Storage):\n    _icon = \"data-lake-storage-gen1.png\"\n\n\nclass DataLakeStorage(_Storage):\n    _icon = \"data-lake-storage.png\"\n\n\nclass DataShareInvitations(_Storage):\n    _icon = \"data-share-invitations.png\"\n\n\nclass DataShares(_Storage):\n    _icon = \"data-shares.png\"\n\n\nclass GeneralStorage(_Storage):\n    _icon = \"general-storage.png\"\n\n\nclass ImportExportJobs(_Storage):\n    _icon = \"import-export-jobs.png\"\n\n\nclass NetappFiles(_Storage):\n    _icon = \"netapp-files.png\"\n\n\nclass QueuesStorage(_Storage):\n    _icon = \"queues-storage.png\"\n\n\nclass RecoveryServicesVaults(_Storage):\n    _icon = \"recovery-services-vaults.png\"\n\n\nclass StorageAccountsClassic(_Storage):\n    _icon = \"storage-accounts-classic.png\"\n\n\nclass StorageAccounts(_Storage):\n    _icon = \"storage-accounts.png\"\n\n\nclass StorageExplorer(_Storage):\n    _icon = \"storage-explorer.png\"\n\n\nclass StorageSyncServices(_Storage):\n    _icon = \"storage-sync-services.png\"\n\n\nclass StorsimpleDataManagers(_Storage):\n    _icon = \"storsimple-data-managers.png\"\n\n\nclass StorsimpleDeviceManagers(_Storage):\n    _icon = \"storsimple-device-managers.png\"\n\n\nclass TableStorage(_Storage):\n    _icon = \"table-storage.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/azure/web.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Azure\n\n\nclass _Web(_Azure):\n    _type = \"web\"\n    _icon_dir = \"resources/azure/web\"\n\n\nclass APICenter(_Web):\n    _icon = \"api-center.png\"\n\n\nclass APIConnections(_Web):\n    _icon = \"api-connections.png\"\n\n\nclass APIManagementServices(_Web):\n    _icon = \"api-management-services.png\"\n\n\nclass AppServiceCertificates(_Web):\n    _icon = \"app-service-certificates.png\"\n\n\nclass AppServiceDomains(_Web):\n    _icon = \"app-service-domains.png\"\n\n\nclass AppServiceEnvironments(_Web):\n    _icon = \"app-service-environments.png\"\n\n\nclass AppServicePlans(_Web):\n    _icon = \"app-service-plans.png\"\n\n\nclass AppServices(_Web):\n    _icon = \"app-services.png\"\n\n\nclass AppSpace(_Web):\n    _icon = \"app-space.png\"\n\n\nclass AzureMediaService(_Web):\n    _icon = \"azure-media-service.png\"\n\n\nclass AzureSpringApps(_Web):\n    _icon = \"azure-spring-apps.png\"\n\n\nclass CognitiveSearch(_Web):\n    _icon = \"cognitive-search.png\"\n\n\nclass CognitiveServices(_Web):\n    _icon = \"cognitive-services.png\"\n\n\nclass FrontDoorAndCDNProfiles(_Web):\n    _icon = \"front-door-and-cdn-profiles.png\"\n\n\nclass MediaServices(_Web):\n    _icon = \"media-services.png\"\n\n\nclass NotificationHubNamespaces(_Web):\n    _icon = \"notification-hub-namespaces.png\"\n\n\nclass PowerPlatform(_Web):\n    _icon = \"power-platform.png\"\n\n\nclass Search(_Web):\n    _icon = \"search.png\"\n\n\nclass Signalr(_Web):\n    _icon = \"signalr.png\"\n\n\nclass StaticApps(_Web):\n    _icon = \"static-apps.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/base/__init__.py",
    "content": "\"\"\"\nBase provides a set of general services for backend infrastructure.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Base(Node):\n    _provider = \"base\"\n    _icon_dir = \"resources/base\"\n\n    fontcolor = \"#ffffff\"\n"
  },
  {
    "path": "diagrams/c4/__init__.py",
    "content": "\"\"\"\nA set of nodes and edges to visualize software architecture using the C4 model.\n\"\"\"\n\nimport html\nimport textwrap\n\nfrom diagrams import Cluster, Edge, Node\n\n\ndef _format_node_label(name, key, description):\n    \"\"\"Create a graphviz label string for a C4 node\"\"\"\n    title = f'<font point-size=\"12\"><b>{html.escape(name)}</b></font><br/>'\n    subtitle = f'<font point-size=\"9\">[{html.escape(key)}]<br/></font>' if key else \"\"\n    text = f'<br/><font point-size=\"10\">{_format_description(description)}</font>' if description else \"\"\n    return f\"<{title}{subtitle}{text}>\"\n\n\ndef _format_description(description):\n    \"\"\"\n    Formats the description string so it fits into the C4 nodes.\n\n    It line-breaks the description so it fits onto exactly three lines. If there are more\n    than three lines, all further lines are discarded and \"...\" inserted on the last line to\n    indicate that it was shortened. This will also html-escape the description so it can\n    safely be included in a HTML label.\n    \"\"\"\n    wrapper = textwrap.TextWrapper(width=40, max_lines=3)\n    lines = [html.escape(line) for line in wrapper.wrap(description)]\n    # fill up with empty lines so it is always three\n    lines += [\"\"] * (3 - len(lines))\n    return \"<br/>\".join(lines)\n\n\ndef _format_edge_label(description):\n    \"\"\"Create a graphviz label string for a C4 edge\"\"\"\n    wrapper = textwrap.TextWrapper(width=24, max_lines=3)\n    lines = [html.escape(line) for line in wrapper.wrap(description)]\n    text = \"<br/>\".join(lines)\n    return f'<<font point-size=\"10\">{text}</font>>'\n\n\ndef C4Node(name, technology=\"\", description=\"\", type=\"Container\", **kwargs):\n    key = f\"{type}: {technology}\" if technology else type\n    node_attributes = {\n        \"label\": _format_node_label(name, key, description),\n        \"labelloc\": \"c\",\n        \"shape\": \"rect\",\n        \"width\": \"2.6\",\n        \"height\": \"1.6\",\n        \"fixedsize\": \"true\",\n        \"style\": \"filled\",\n        \"fillcolor\": \"dodgerblue3\",\n        \"fontcolor\": \"white\",\n    }\n    # collapse boxes to a smaller form if they don't have a description\n    if not description:\n        node_attributes.update({\"width\": \"2\", \"height\": \"1\"})\n    node_attributes.update(kwargs)\n    return Node(**node_attributes)\n\n\ndef Container(name, technology=\"\", description=\"\", **kwargs):\n    container_attributes = {\n        \"name\": name,\n        \"technology\": technology,\n        \"description\": description,\n        \"type\": \"Container\",\n    }\n    container_attributes.update(kwargs)\n    return C4Node(**container_attributes)\n\n\ndef Database(name, technology=\"\", description=\"\", **kwargs):\n    database_attributes = {\n        \"name\": name,\n        \"technology\": technology,\n        \"description\": description,\n        \"type\": \"Database\",\n        \"shape\": \"cylinder\",\n        \"labelloc\": \"b\",\n    }\n    database_attributes.update(kwargs)\n    return C4Node(**database_attributes)\n\n\ndef System(name, description=\"\", external=False, **kwargs):\n    system_attributes = {\n        \"name\": name,\n        \"description\": description,\n        \"type\": \"External System\" if external else \"System\",\n        \"fillcolor\": \"gray60\" if external else \"dodgerblue4\",\n    }\n    system_attributes.update(kwargs)\n    return C4Node(**system_attributes)\n\n\ndef Person(name, description=\"\", external=False, **kwargs):\n    person_attributes = {\n        \"name\": name,\n        \"description\": description,\n        \"type\": \"External Person\" if external else \"Person\",\n        \"fillcolor\": \"gray60\" if external else \"dodgerblue4\",\n        \"style\": \"rounded,filled\",\n    }\n    person_attributes.update(kwargs)\n    return C4Node(**person_attributes)\n\n\ndef SystemBoundary(name, **kwargs):\n    graph_attributes = {\n        \"label\": html.escape(name),\n        \"bgcolor\": \"white\",\n        \"margin\": \"16\",\n        \"style\": \"dashed\",\n    }\n    graph_attributes.update(kwargs)\n    return Cluster(name, graph_attr=graph_attributes)\n\n\ndef Relationship(label=\"\", **kwargs):\n    edge_attributes = {\n        \"style\": \"dashed\",\n        \"color\": \"gray60\",\n        \"label\": _format_edge_label(label) if label else \"\",\n    }\n    edge_attributes.update(kwargs)\n    return Edge(**edge_attributes)\n"
  },
  {
    "path": "diagrams/cli.py",
    "content": "import argparse\nimport sys\n\n\ndef run() -> int:\n    \"\"\"\n    Run diagrams code files in a diagrams environment.\n    Args:\n        paths: A list of paths to Python files containing diagrams code.\n\n    Returns:\n        The exit code.\n    \"\"\"\n    parser = argparse.ArgumentParser(\n        description=\"Run diagrams code files in a diagrams environment.\",\n    )\n    parser.add_argument(\n        \"paths\",\n        metavar=\"path\",\n        type=str,\n        nargs=\"+\",\n        help=\"a Python file containing diagrams code\",\n    )\n    args = parser.parse_args()\n\n    for path in args.paths:\n        with open(path, encoding='utf-8') as f:\n            exec(f.read())\n\n    return 0\n\n\ndef main():\n    sys.exit(run())\n\n\nif __name__ == \"__main__\":\n    main()\n"
  },
  {
    "path": "diagrams/custom/__init__.py",
    "content": "\"\"\"\nCustom provides the possibility of load an image to be presented as a node.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass Custom(Node):\n    _provider = \"custom\"\n    _type = \"custom\"\n    _icon_dir = None\n\n    fontcolor = \"#ffffff\"\n\n    def _load_icon(self):\n        return self._icon\n\n    def __init__(self, label, icon_path, *args, **kwargs):\n        self._icon = icon_path\n        super().__init__(label, *args, **kwargs)\n"
  },
  {
    "path": "diagrams/digitalocean/__init__.py",
    "content": "\"\"\"\nDigitalOcean provides a set of services for DigitalOcean provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _DigitalOcean(Node):\n    _provider = \"digitalocean\"\n    _icon_dir = \"resources/digitalocean\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass DigitalOcean(_DigitalOcean):\n    _icon = \"digitalocean.png\"\n"
  },
  {
    "path": "diagrams/digitalocean/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _DigitalOcean\n\n\nclass _Compute(_DigitalOcean):\n    _type = \"compute\"\n    _icon_dir = \"resources/digitalocean/compute\"\n\n\nclass Containers(_Compute):\n    _icon = \"containers.png\"\n\n\nclass Docker(_Compute):\n    _icon = \"docker.png\"\n\n\nclass DropletConnect(_Compute):\n    _icon = \"droplet-connect.png\"\n\n\nclass DropletSnapshot(_Compute):\n    _icon = \"droplet-snapshot.png\"\n\n\nclass Droplet(_Compute):\n    _icon = \"droplet.png\"\n\n\nclass K8SCluster(_Compute):\n    _icon = \"k8s-cluster.png\"\n\n\nclass K8SNodePool(_Compute):\n    _icon = \"k8s-node-pool.png\"\n\n\nclass K8SNode(_Compute):\n    _icon = \"k8s-node.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/digitalocean/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _DigitalOcean\n\n\nclass _Database(_DigitalOcean):\n    _type = \"database\"\n    _icon_dir = \"resources/digitalocean/database\"\n\n\nclass DbaasPrimaryStandbyMore(_Database):\n    _icon = \"dbaas-primary-standby-more.png\"\n\n\nclass DbaasPrimary(_Database):\n    _icon = \"dbaas-primary.png\"\n\n\nclass DbaasReadOnly(_Database):\n    _icon = \"dbaas-read-only.png\"\n\n\nclass DbaasStandby(_Database):\n    _icon = \"dbaas-standby.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/digitalocean/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _DigitalOcean\n\n\nclass _Network(_DigitalOcean):\n    _type = \"network\"\n    _icon_dir = \"resources/digitalocean/network\"\n\n\nclass Certificate(_Network):\n    _icon = \"certificate.png\"\n\n\nclass DomainRegistration(_Network):\n    _icon = \"domain-registration.png\"\n\n\nclass Domain(_Network):\n    _icon = \"domain.png\"\n\n\nclass Firewall(_Network):\n    _icon = \"firewall.png\"\n\n\nclass FloatingIp(_Network):\n    _icon = \"floating-ip.png\"\n\n\nclass InternetGateway(_Network):\n    _icon = \"internet-gateway.png\"\n\n\nclass LoadBalancer(_Network):\n    _icon = \"load-balancer.png\"\n\n\nclass ManagedVpn(_Network):\n    _icon = \"managed-vpn.png\"\n\n\nclass Vpc(_Network):\n    _icon = \"vpc.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/digitalocean/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _DigitalOcean\n\n\nclass _Storage(_DigitalOcean):\n    _type = \"storage\"\n    _icon_dir = \"resources/digitalocean/storage\"\n\n\nclass Folder(_Storage):\n    _icon = \"folder.png\"\n\n\nclass Space(_Storage):\n    _icon = \"space.png\"\n\n\nclass VolumeSnapshot(_Storage):\n    _icon = \"volume-snapshot.png\"\n\n\nclass Volume(_Storage):\n    _icon = \"volume.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/__init__.py",
    "content": "\"\"\"\nElastic provides a set of general elastic services.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Elastic(Node):\n    _provider = \"elastic\"\n    _icon_dir = \"resources/elastic\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Elastic(_Elastic):\n    _icon = \"elastic.png\"\n"
  },
  {
    "path": "diagrams/elastic/agent.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Agent(_Elastic):\n    _type = \"agent\"\n    _icon_dir = \"resources/elastic/agent\"\n\n\nclass Agent(_Agent):\n    _icon = \"agent.png\"\n\n\nclass Endpoint(_Agent):\n    _icon = \"endpoint.png\"\n\n\nclass Fleet(_Agent):\n    _icon = \"fleet.png\"\n\n\nclass Integrations(_Agent):\n    _icon = \"integrations.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/beats.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Beats(_Elastic):\n    _type = \"beats\"\n    _icon_dir = \"resources/elastic/beats\"\n\n\nclass APM(_Beats):\n    _icon = \"apm.png\"\n\n\nclass Auditbeat(_Beats):\n    _icon = \"auditbeat.png\"\n\n\nclass Filebeat(_Beats):\n    _icon = \"filebeat.png\"\n\n\nclass Functionbeat(_Beats):\n    _icon = \"functionbeat.png\"\n\n\nclass Heartbeat(_Beats):\n    _icon = \"heartbeat.png\"\n\n\nclass Metricbeat(_Beats):\n    _icon = \"metricbeat.png\"\n\n\nclass Packetbeat(_Beats):\n    _icon = \"packetbeat.png\"\n\n\nclass Winlogbeat(_Beats):\n    _icon = \"winlogbeat.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/elasticsearch.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Elasticsearch(_Elastic):\n    _type = \"elasticsearch\"\n    _icon_dir = \"resources/elastic/elasticsearch\"\n\n\nclass Alerting(_Elasticsearch):\n    _icon = \"alerting.png\"\n\n\nclass Beats(_Elasticsearch):\n    _icon = \"beats.png\"\n\n\nclass Elasticsearch(_Elasticsearch):\n    _icon = \"elasticsearch.png\"\n\n\nclass Kibana(_Elasticsearch):\n    _icon = \"kibana.png\"\n\n\nclass LogstashPipeline(_Elasticsearch):\n    _icon = \"logstash-pipeline.png\"\n\n\nclass Logstash(_Elasticsearch):\n    _icon = \"logstash.png\"\n\n\nclass MachineLearning(_Elasticsearch):\n    _icon = \"machine-learning.png\"\n\n\nclass MapServices(_Elasticsearch):\n    _icon = \"map-services.png\"\n\n\nclass Maps(_Elasticsearch):\n    _icon = \"maps.png\"\n\n\nclass Monitoring(_Elasticsearch):\n    _icon = \"monitoring.png\"\n\n\nclass SearchableSnapshots(_Elasticsearch):\n    _icon = \"searchable-snapshots.png\"\n\n\nclass SecuritySettings(_Elasticsearch):\n    _icon = \"security-settings.png\"\n\n\nclass SQL(_Elasticsearch):\n    _icon = \"sql.png\"\n\n\nclass Stack(_Elasticsearch):\n    _icon = \"stack.png\"\n\n\n# Aliases\n\nElasticSearch = Elasticsearch\nLogStash = Logstash\nML = MachineLearning\n"
  },
  {
    "path": "diagrams/elastic/enterprisesearch.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Enterprisesearch(_Elastic):\n    _type = \"enterprisesearch\"\n    _icon_dir = \"resources/elastic/enterprisesearch\"\n\n\nclass AppSearch(_Enterprisesearch):\n    _icon = \"app-search.png\"\n\n\nclass Crawler(_Enterprisesearch):\n    _icon = \"crawler.png\"\n\n\nclass EnterpriseSearch(_Enterprisesearch):\n    _icon = \"enterprise-search.png\"\n\n\nclass SiteSearch(_Enterprisesearch):\n    _icon = \"site-search.png\"\n\n\nclass WorkplaceSearch(_Enterprisesearch):\n    _icon = \"workplace-search.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/observability.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Observability(_Elastic):\n    _type = \"observability\"\n    _icon_dir = \"resources/elastic/observability\"\n\n\nclass APM(_Observability):\n    _icon = \"apm.png\"\n\n\nclass Logs(_Observability):\n    _icon = \"logs.png\"\n\n\nclass Metrics(_Observability):\n    _icon = \"metrics.png\"\n\n\nclass Observability(_Observability):\n    _icon = \"observability.png\"\n\n\nclass Uptime(_Observability):\n    _icon = \"uptime.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/orchestration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Orchestration(_Elastic):\n    _type = \"orchestration\"\n    _icon_dir = \"resources/elastic/orchestration\"\n\n\nclass ECE(_Orchestration):\n    _icon = \"ece.png\"\n\n\nclass ECK(_Orchestration):\n    _icon = \"eck.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/saas.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Saas(_Elastic):\n    _type = \"saas\"\n    _icon_dir = \"resources/elastic/saas\"\n\n\nclass Cloud(_Saas):\n    _icon = \"cloud.png\"\n\n\nclass Elastic(_Saas):\n    _icon = \"elastic.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/elastic/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Elastic\n\n\nclass _Security(_Elastic):\n    _type = \"security\"\n    _icon_dir = \"resources/elastic/security\"\n\n\nclass Endpoint(_Security):\n    _icon = \"endpoint.png\"\n\n\nclass Security(_Security):\n    _icon = \"security.png\"\n\n\nclass SIEM(_Security):\n    _icon = \"siem.png\"\n\n\nclass Xdr(_Security):\n    _icon = \"xdr.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/firebase/__init__.py",
    "content": "\"\"\"\nFirebase provides a set of services for Firebase provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Firebase(Node):\n    _provider = \"firebase\"\n    _icon_dir = \"resources/firebase\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Firebase(_Firebase):\n    _icon = \"firebase.png\"\n"
  },
  {
    "path": "diagrams/firebase/base.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Firebase\n\n\nclass _Base(_Firebase):\n    _type = \"base\"\n    _icon_dir = \"resources/firebase/base\"\n\n\nclass Firebase(_Base):\n    _icon = \"firebase.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/firebase/develop.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Firebase\n\n\nclass _Develop(_Firebase):\n    _type = \"develop\"\n    _icon_dir = \"resources/firebase/develop\"\n\n\nclass Authentication(_Develop):\n    _icon = \"authentication.png\"\n\n\nclass Firestore(_Develop):\n    _icon = \"firestore.png\"\n\n\nclass Functions(_Develop):\n    _icon = \"functions.png\"\n\n\nclass Hosting(_Develop):\n    _icon = \"hosting.png\"\n\n\nclass MLKit(_Develop):\n    _icon = \"ml-kit.png\"\n\n\nclass RealtimeDatabase(_Develop):\n    _icon = \"realtime-database.png\"\n\n\nclass Storage(_Develop):\n    _icon = \"storage.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/firebase/extentions.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Firebase\n\n\nclass _Extentions(_Firebase):\n    _type = \"extentions\"\n    _icon_dir = \"resources/firebase/extentions\"\n\n\nclass Extensions(_Extentions):\n    _icon = \"extensions.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/firebase/grow.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Firebase\n\n\nclass _Grow(_Firebase):\n    _type = \"grow\"\n    _icon_dir = \"resources/firebase/grow\"\n\n\nclass ABTesting(_Grow):\n    _icon = \"ab-testing.png\"\n\n\nclass AppIndexing(_Grow):\n    _icon = \"app-indexing.png\"\n\n\nclass DynamicLinks(_Grow):\n    _icon = \"dynamic-links.png\"\n\n\nclass InAppMessaging(_Grow):\n    _icon = \"in-app-messaging.png\"\n\n\nclass Invites(_Grow):\n    _icon = \"invites.png\"\n\n\nclass Messaging(_Grow):\n    _icon = \"messaging.png\"\n\n\nclass Predictions(_Grow):\n    _icon = \"predictions.png\"\n\n\nclass RemoteConfig(_Grow):\n    _icon = \"remote-config.png\"\n\n\n# Aliases\n\nFCM = Messaging\n"
  },
  {
    "path": "diagrams/firebase/quality.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Firebase\n\n\nclass _Quality(_Firebase):\n    _type = \"quality\"\n    _icon_dir = \"resources/firebase/quality\"\n\n\nclass AppDistribution(_Quality):\n    _icon = \"app-distribution.png\"\n\n\nclass CrashReporting(_Quality):\n    _icon = \"crash-reporting.png\"\n\n\nclass Crashlytics(_Quality):\n    _icon = \"crashlytics.png\"\n\n\nclass PerformanceMonitoring(_Quality):\n    _icon = \"performance-monitoring.png\"\n\n\nclass TestLab(_Quality):\n    _icon = \"test-lab.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gcp/__init__.py",
    "content": "\"\"\"\nGCP provides a set of services for Google Cloud Platform provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _GCP(Node):\n    _provider = \"gcp\"\n    _icon_dir = \"resources/gcp\"\n\n    fontcolor = \"#2d3436\"\n\n\nclass GCP(_GCP):\n    _icon = \"gcp.png\"\n"
  },
  {
    "path": "diagrams/gcp/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Analytics(_GCP):\n    _type = \"analytics\"\n    _icon_dir = \"resources/gcp/analytics\"\n\n\nclass Bigquery(_Analytics):\n    _icon = \"bigquery.png\"\n\n\nclass Composer(_Analytics):\n    _icon = \"composer.png\"\n\n\nclass DataCatalog(_Analytics):\n    _icon = \"data-catalog.png\"\n\n\nclass DataFusion(_Analytics):\n    _icon = \"data-fusion.png\"\n\n\nclass Dataflow(_Analytics):\n    _icon = \"dataflow.png\"\n\n\nclass Datalab(_Analytics):\n    _icon = \"datalab.png\"\n\n\nclass Dataprep(_Analytics):\n    _icon = \"dataprep.png\"\n\n\nclass Dataproc(_Analytics):\n    _icon = \"dataproc.png\"\n\n\nclass Genomics(_Analytics):\n    _icon = \"genomics.png\"\n\n\nclass Looker(_Analytics):\n    _icon = \"looker.png\"\n\n\nclass Pubsub(_Analytics):\n    _icon = \"pubsub.png\"\n\n\n# Aliases\n\nBigQuery = Bigquery\nPubSub = Pubsub\n"
  },
  {
    "path": "diagrams/gcp/api.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _API(_GCP):\n    _type = \"api\"\n    _icon_dir = \"resources/gcp/api\"\n\n\nclass APIGateway(_API):\n    _icon = \"api-gateway.png\"\n\n\nclass Apigee(_API):\n    _icon = \"apigee.png\"\n\n\nclass Endpoints(_API):\n    _icon = \"endpoints.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gcp/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Compute(_GCP):\n    _type = \"compute\"\n    _icon_dir = \"resources/gcp/compute\"\n\n\nclass AppEngine(_Compute):\n    _icon = \"app-engine.png\"\n\n\nclass BinaryAuthorization(_Compute):\n    _icon = \"binary-authorization.png\"\n\n\nclass ComputeEngine(_Compute):\n    _icon = \"compute-engine.png\"\n\n\nclass ContainerOptimizedOS(_Compute):\n    _icon = \"container-optimized-os.png\"\n\n\nclass Functions(_Compute):\n    _icon = \"functions.png\"\n\n\nclass GKEOnPrem(_Compute):\n    _icon = \"gke-on-prem.png\"\n\n\nclass GPU(_Compute):\n    _icon = \"gpu.png\"\n\n\nclass KubernetesEngine(_Compute):\n    _icon = \"kubernetes-engine.png\"\n\n\nclass OSConfigurationManagement(_Compute):\n    _icon = \"os-configuration-management.png\"\n\n\nclass OSInventoryManagement(_Compute):\n    _icon = \"os-inventory-management.png\"\n\n\nclass OSPatchManagement(_Compute):\n    _icon = \"os-patch-management.png\"\n\n\nclass Run(_Compute):\n    _icon = \"run.png\"\n\n\n# Aliases\n\nGAE = AppEngine\nGCE = ComputeEngine\nGCF = Functions\nGKE = KubernetesEngine\nCloudRun = Run\n"
  },
  {
    "path": "diagrams/gcp/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Database(_GCP):\n    _type = \"database\"\n    _icon_dir = \"resources/gcp/database\"\n\n\nclass Bigtable(_Database):\n    _icon = \"bigtable.png\"\n\n\nclass Datastore(_Database):\n    _icon = \"datastore.png\"\n\n\nclass Firestore(_Database):\n    _icon = \"firestore.png\"\n\n\nclass Memorystore(_Database):\n    _icon = \"memorystore.png\"\n\n\nclass Spanner(_Database):\n    _icon = \"spanner.png\"\n\n\nclass SQL(_Database):\n    _icon = \"sql.png\"\n\n\n# Aliases\n\nBigTable = Bigtable\n"
  },
  {
    "path": "diagrams/gcp/devtools.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Devtools(_GCP):\n    _type = \"devtools\"\n    _icon_dir = \"resources/gcp/devtools\"\n\n\nclass Build(_Devtools):\n    _icon = \"build.png\"\n\n\nclass CloudShell(_Devtools):\n    _icon = \"cloud-shell.png\"\n\n\nclass CodeForIntellij(_Devtools):\n    _icon = \"code-for-intellij.png\"\n\n\nclass Code(_Devtools):\n    _icon = \"code.png\"\n\n\nclass ContainerRegistry(_Devtools):\n    _icon = \"container-registry.png\"\n\n\nclass GradleAppEnginePlugin(_Devtools):\n    _icon = \"gradle-app-engine-plugin.png\"\n\n\nclass IdePlugins(_Devtools):\n    _icon = \"ide-plugins.png\"\n\n\nclass MavenAppEnginePlugin(_Devtools):\n    _icon = \"maven-app-engine-plugin.png\"\n\n\nclass Scheduler(_Devtools):\n    _icon = \"scheduler.png\"\n\n\nclass SDK(_Devtools):\n    _icon = \"sdk.png\"\n\n\nclass ServiceCatalog(_Devtools):\n    _icon = \"service-catalog.png\"\n\n\nclass SourceRepositories(_Devtools):\n    _icon = \"source-repositories.png\"\n\n\nclass Tasks(_Devtools):\n    _icon = \"tasks.png\"\n\n\nclass TestLab(_Devtools):\n    _icon = \"test-lab.png\"\n\n\nclass ToolsForEclipse(_Devtools):\n    _icon = \"tools-for-eclipse.png\"\n\n\nclass ToolsForPowershell(_Devtools):\n    _icon = \"tools-for-powershell.png\"\n\n\nclass ToolsForVisualStudio(_Devtools):\n    _icon = \"tools-for-visual-studio.png\"\n\n\n# Aliases\n\nGCR = ContainerRegistry\n"
  },
  {
    "path": "diagrams/gcp/iot.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Iot(_GCP):\n    _type = \"iot\"\n    _icon_dir = \"resources/gcp/iot\"\n\n\nclass IotCore(_Iot):\n    _icon = \"iot-core.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gcp/management.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Management(_GCP):\n    _type = \"management\"\n    _icon_dir = \"resources/gcp/management\"\n\n\nclass Billing(_Management):\n    _icon = \"billing.png\"\n\n\nclass Project(_Management):\n    _icon = \"project.png\"\n\n\nclass Quotas(_Management):\n    _icon = \"quotas.png\"\n\n\nclass Support(_Management):\n    _icon = \"support.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gcp/migration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Migration(_GCP):\n    _type = \"migration\"\n    _icon_dir = \"resources/gcp/migration\"\n\n\nclass MigrateComputeEngine(_Migration):\n    _icon = \"migrate-compute-engine.png\"\n\n\nclass TransferAppliance(_Migration):\n    _icon = \"transfer-appliance.png\"\n\n\n# Aliases\n\nCE = MigrateComputeEngine\n"
  },
  {
    "path": "diagrams/gcp/ml.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _ML(_GCP):\n    _type = \"ml\"\n    _icon_dir = \"resources/gcp/ml\"\n\n\nclass AdvancedSolutionsLab(_ML):\n    _icon = \"advanced-solutions-lab.png\"\n\n\nclass AIHub(_ML):\n    _icon = \"ai-hub.png\"\n\n\nclass AIPlatformDataLabelingService(_ML):\n    _icon = \"ai-platform-data-labeling-service.png\"\n\n\nclass AIPlatform(_ML):\n    _icon = \"ai-platform.png\"\n\n\nclass AutomlNaturalLanguage(_ML):\n    _icon = \"automl-natural-language.png\"\n\n\nclass AutomlTables(_ML):\n    _icon = \"automl-tables.png\"\n\n\nclass AutomlTranslation(_ML):\n    _icon = \"automl-translation.png\"\n\n\nclass AutomlVideoIntelligence(_ML):\n    _icon = \"automl-video-intelligence.png\"\n\n\nclass AutomlVision(_ML):\n    _icon = \"automl-vision.png\"\n\n\nclass Automl(_ML):\n    _icon = \"automl.png\"\n\n\nclass DialogFlowEnterpriseEdition(_ML):\n    _icon = \"dialog-flow-enterprise-edition.png\"\n\n\nclass InferenceAPI(_ML):\n    _icon = \"inference-api.png\"\n\n\nclass JobsAPI(_ML):\n    _icon = \"jobs-api.png\"\n\n\nclass NaturalLanguageAPI(_ML):\n    _icon = \"natural-language-api.png\"\n\n\nclass RecommendationsAI(_ML):\n    _icon = \"recommendations-ai.png\"\n\n\nclass SpeechToText(_ML):\n    _icon = \"speech-to-text.png\"\n\n\nclass TextToSpeech(_ML):\n    _icon = \"text-to-speech.png\"\n\n\nclass TPU(_ML):\n    _icon = \"tpu.png\"\n\n\nclass TranslationAPI(_ML):\n    _icon = \"translation-api.png\"\n\n\nclass VertexAI(_ML):\n    _icon = \"vertex-ai.png\"\n\n\nclass VideoIntelligenceAPI(_ML):\n    _icon = \"video-intelligence-api.png\"\n\n\nclass VisionAPI(_ML):\n    _icon = \"vision-api.png\"\n\n\n# Aliases\n\nAutoML = Automl\nNLAPI = NaturalLanguageAPI\nSTT = SpeechToText\nTTS = TextToSpeech\n"
  },
  {
    "path": "diagrams/gcp/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Network(_GCP):\n    _type = \"network\"\n    _icon_dir = \"resources/gcp/network\"\n\n\nclass Armor(_Network):\n    _icon = \"armor.png\"\n\n\nclass CDN(_Network):\n    _icon = \"cdn.png\"\n\n\nclass CloudIDS(_Network):\n    _icon = \"cloud-ids.png\"\n\n\nclass DedicatedInterconnect(_Network):\n    _icon = \"dedicated-interconnect.png\"\n\n\nclass DNS(_Network):\n    _icon = \"dns.png\"\n\n\nclass ExternalIpAddresses(_Network):\n    _icon = \"external-ip-addresses.png\"\n\n\nclass FirewallRules(_Network):\n    _icon = \"firewall-rules.png\"\n\n\nclass LoadBalancing(_Network):\n    _icon = \"load-balancing.png\"\n\n\nclass NAT(_Network):\n    _icon = \"nat.png\"\n\n\nclass NetworkConnectivityCenter(_Network):\n    _icon = \"network-connectivity-center.png\"\n\n\nclass NetworkIntelligenceCenter(_Network):\n    _icon = \"network-intelligence-center.png\"\n\n\nclass NetworkSecurity(_Network):\n    _icon = \"network-security.png\"\n\n\nclass NetworkTiers(_Network):\n    _icon = \"network-tiers.png\"\n\n\nclass NetworkTopology(_Network):\n    _icon = \"network-topology.png\"\n\n\nclass Network(_Network):\n    _icon = \"network.png\"\n\n\nclass PartnerInterconnect(_Network):\n    _icon = \"partner-interconnect.png\"\n\n\nclass PremiumNetworkTier(_Network):\n    _icon = \"premium-network-tier.png\"\n\n\nclass PrivateServiceConnect(_Network):\n    _icon = \"private-service-connect.png\"\n\n\nclass Router(_Network):\n    _icon = \"router.png\"\n\n\nclass Routes(_Network):\n    _icon = \"routes.png\"\n\n\nclass ServiceMesh(_Network):\n    _icon = \"service-mesh.png\"\n\n\nclass StandardNetworkTier(_Network):\n    _icon = \"standard-network-tier.png\"\n\n\nclass TrafficDirector(_Network):\n    _icon = \"traffic-director.png\"\n\n\nclass VirtualPrivateCloud(_Network):\n    _icon = \"virtual-private-cloud.png\"\n\n\nclass VPN(_Network):\n    _icon = \"vpn.png\"\n\n\n# Aliases\n\nIDS = CloudIDS\nPSC = PrivateServiceConnect\nVPC = VirtualPrivateCloud\n"
  },
  {
    "path": "diagrams/gcp/operations.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Operations(_GCP):\n    _type = \"operations\"\n    _icon_dir = \"resources/gcp/operations\"\n\n\nclass Logging(_Operations):\n    _icon = \"logging.png\"\n\n\nclass Monitoring(_Operations):\n    _icon = \"monitoring.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gcp/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Security(_GCP):\n    _type = \"security\"\n    _icon_dir = \"resources/gcp/security\"\n\n\nclass AccessContextManager(_Security):\n    _icon = \"access-context-manager.png\"\n\n\nclass AssuredWorkloads(_Security):\n    _icon = \"assured-workloads.png\"\n\n\nclass CertificateAuthorityService(_Security):\n    _icon = \"certificate-authority-service.png\"\n\n\nclass CertificateManager(_Security):\n    _icon = \"certificate-manager.png\"\n\n\nclass CloudAssetInventory(_Security):\n    _icon = \"cloud-asset-inventory.png\"\n\n\nclass Iam(_Security):\n    _icon = \"iam.png\"\n\n\nclass IAP(_Security):\n    _icon = \"iap.png\"\n\n\nclass KeyManagementService(_Security):\n    _icon = \"key-management-service.png\"\n\n\nclass ResourceManager(_Security):\n    _icon = \"resource-manager.png\"\n\n\nclass SecretManager(_Security):\n    _icon = \"secret-manager.png\"\n\n\nclass SecurityCommandCenter(_Security):\n    _icon = \"security-command-center.png\"\n\n\nclass SecurityHealthAdvisor(_Security):\n    _icon = \"security-health-advisor.png\"\n\n\nclass SecurityScanner(_Security):\n    _icon = \"security-scanner.png\"\n\n\n# Aliases\n\nACM = AccessContextManager\nKMS = KeyManagementService\nSCC = SecurityCommandCenter\n"
  },
  {
    "path": "diagrams/gcp/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GCP\n\n\nclass _Storage(_GCP):\n    _type = \"storage\"\n    _icon_dir = \"resources/gcp/storage\"\n\n\nclass Filestore(_Storage):\n    _icon = \"filestore.png\"\n\n\nclass LocalSSD(_Storage):\n    _icon = \"local-ssd.png\"\n\n\nclass PersistentDisk(_Storage):\n    _icon = \"persistent-disk.png\"\n\n\nclass Storage(_Storage):\n    _icon = \"storage.png\"\n\n\n# Aliases\n\nSSD = LocalSSD\nGCS = Storage\n"
  },
  {
    "path": "diagrams/generic/__init__.py",
    "content": "\"\"\"\nGeneric provides the possibility of load an image to be presented as a node.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Generic(Node):\n    provider = \"generic\"\n    _icon_dir = \"resources/generic\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Generic(_Generic):\n    _icon = \"generic.png\"\n"
  },
  {
    "path": "diagrams/generic/blank.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Blank(_Generic):\n    _type = \"blank\"\n    _icon_dir = \"resources/generic/blank\"\n\n\nclass Blank(_Blank):\n    _icon = \"blank.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Compute(_Generic):\n    _type = \"compute\"\n    _icon_dir = \"resources/generic/compute\"\n\n\nclass Rack(_Compute):\n    _icon = \"rack.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Database(_Generic):\n    _type = \"database\"\n    _icon_dir = \"resources/generic/database\"\n\n\nclass SQL(_Database):\n    _icon = \"sql.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/device.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Device(_Generic):\n    _type = \"device\"\n    _icon_dir = \"resources/generic/device\"\n\n\nclass Mobile(_Device):\n    _icon = \"mobile.png\"\n\n\nclass Tablet(_Device):\n    _icon = \"tablet.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Network(_Generic):\n    _type = \"network\"\n    _icon_dir = \"resources/generic/network\"\n\n\nclass Firewall(_Network):\n    _icon = \"firewall.png\"\n\n\nclass Router(_Network):\n    _icon = \"router.png\"\n\n\nclass Subnet(_Network):\n    _icon = \"subnet.png\"\n\n\nclass Switch(_Network):\n    _icon = \"switch.png\"\n\n\nclass VPN(_Network):\n    _icon = \"vpn.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/os.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Os(_Generic):\n    _type = \"os\"\n    _icon_dir = \"resources/generic/os\"\n\n\nclass Android(_Os):\n    _icon = \"android.png\"\n\n\nclass Centos(_Os):\n    _icon = \"centos.png\"\n\n\nclass Debian(_Os):\n    _icon = \"debian.png\"\n\n\nclass IOS(_Os):\n    _icon = \"ios.png\"\n\n\nclass LinuxGeneral(_Os):\n    _icon = \"linux-general.png\"\n\n\nclass Raspbian(_Os):\n    _icon = \"raspbian.png\"\n\n\nclass RedHat(_Os):\n    _icon = \"red-hat.png\"\n\n\nclass Suse(_Os):\n    _icon = \"suse.png\"\n\n\nclass Ubuntu(_Os):\n    _icon = \"ubuntu.png\"\n\n\nclass Windows(_Os):\n    _icon = \"windows.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/place.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Place(_Generic):\n    _type = \"place\"\n    _icon_dir = \"resources/generic/place\"\n\n\nclass Datacenter(_Place):\n    _icon = \"datacenter.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Storage(_Generic):\n    _type = \"storage\"\n    _icon_dir = \"resources/generic/storage\"\n\n\nclass Storage(_Storage):\n    _icon = \"storage.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/generic/virtualization.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Generic\n\n\nclass _Virtualization(_Generic):\n    _type = \"virtualization\"\n    _icon_dir = \"resources/generic/virtualization\"\n\n\nclass Qemu(_Virtualization):\n    _icon = \"qemu.png\"\n\n\nclass Virtualbox(_Virtualization):\n    _icon = \"virtualbox.png\"\n\n\nclass Vmware(_Virtualization):\n    _icon = \"vmware.png\"\n\n\nclass XEN(_Virtualization):\n    _icon = \"xen.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/__init__.py",
    "content": "\"\"\"\nGIS provides a set of services for Geographic Information Systems provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _GIS(Node):\n    _provider = \"gis\"\n    _icon_dir = \"resources/gis\"\n\n    fontcolor = \"#2d3436\"\n"
  },
  {
    "path": "diagrams/gis/cli.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Cli(_GIS):\n    _type = \"cli\"\n    _icon_dir = \"resources/gis/cli\"\n\n\nclass Gdal(_Cli):\n    _icon = \"gdal.png\"\n\n\nclass Imposm(_Cli):\n    _icon = \"imposm.png\"\n\n\nclass Lastools(_Cli):\n    _icon = \"lastools.png\"\n\n\nclass Mapnik(_Cli):\n    _icon = \"mapnik.png\"\n\n\nclass Mdal(_Cli):\n    _icon = \"mdal.png\"\n\n\nclass Pdal(_Cli):\n    _icon = \"pdal.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/cplusplus.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Cplusplus(_GIS):\n    _type = \"cplusplus\"\n    _icon_dir = \"resources/gis/cplusplus\"\n\n\nclass Mapnik(_Cplusplus):\n    _icon = \"mapnik.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/data.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Data(_GIS):\n    _type = \"data\"\n    _icon_dir = \"resources/gis/data\"\n\n\nclass BAN(_Data):\n    _icon = \"ban.png\"\n\n\nclass Here(_Data):\n    _icon = \"here.png\"\n\n\nclass IGN(_Data):\n    _icon = \"ign.png\"\n\n\nclass Openstreetmap(_Data):\n    _icon = \"openstreetmap.png\"\n\n\nclass Overturemaps(_Data):\n    _icon = \"overturemaps.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Database(_GIS):\n    _type = \"database\"\n    _icon_dir = \"resources/gis/database\"\n\n\nclass Postgis(_Database):\n    _icon = \"postgis.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/desktop.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Desktop(_GIS):\n    _type = \"desktop\"\n    _icon_dir = \"resources/gis/desktop\"\n\n\nclass Maptunik(_Desktop):\n    _icon = \"maptunik.png\"\n\n\nclass QGIS(_Desktop):\n    _icon = \"qgis.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/format.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Format(_GIS):\n    _type = \"format\"\n    _icon_dir = \"resources/gis/format\"\n\n\nclass Geopackage(_Format):\n    _icon = \"geopackage.png\"\n\n\nclass Geoparquet(_Format):\n    _icon = \"geoparquet.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/geocoding.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Geocoding(_GIS):\n    _type = \"geocoding\"\n    _icon_dir = \"resources/gis/geocoding\"\n\n\nclass Addok(_Geocoding):\n    _icon = \"addok.png\"\n\n\nclass Gisgraphy(_Geocoding):\n    _icon = \"gisgraphy.png\"\n\n\nclass Nominatim(_Geocoding):\n    _icon = \"nominatim.png\"\n\n\nclass Pelias(_Geocoding):\n    _icon = \"pelias.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/georchestra.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Georchestra(_GIS):\n    _type = \"georchestra\"\n    _icon_dir = \"resources/gis/georchestra\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/java.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Java(_GIS):\n    _type = \"java\"\n    _icon_dir = \"resources/gis/java\"\n\n\nclass Geotools(_Java):\n    _icon = \"geotools.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/javascript.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Javascript(_GIS):\n    _type = \"javascript\"\n    _icon_dir = \"resources/gis/javascript\"\n\n\nclass Cesium(_Javascript):\n    _icon = \"cesium.png\"\n\n\nclass Geostyler(_Javascript):\n    _icon = \"geostyler.png\"\n\n\nclass Keplerjs(_Javascript):\n    _icon = \"keplerjs.png\"\n\n\nclass Leaflet(_Javascript):\n    _icon = \"leaflet.png\"\n\n\nclass Maplibre(_Javascript):\n    _icon = \"maplibre.png\"\n\n\nclass OlExt(_Javascript):\n    _icon = \"ol-ext.png\"\n\n\nclass Openlayers(_Javascript):\n    _icon = \"openlayers.png\"\n\n\nclass Turfjs(_Javascript):\n    _icon = \"turfjs.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/mobile.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Mobile(_GIS):\n    _type = \"mobile\"\n    _icon_dir = \"resources/gis/mobile\"\n\n\nclass Mergin(_Mobile):\n    _icon = \"mergin.png\"\n\n\nclass Qfield(_Mobile):\n    _icon = \"qfield.png\"\n\n\nclass Smash(_Mobile):\n    _icon = \"smash.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/ogc.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _OGC(_GIS):\n    _type = \"ogc\"\n    _icon_dir = \"resources/gis/ogc\"\n\n\nclass OGC(_OGC):\n    _icon = \"ogc.png\"\n\n\nclass WFS(_OGC):\n    _icon = \"wfs.png\"\n\n\nclass WMS(_OGC):\n    _icon = \"wms.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/organization.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Organization(_GIS):\n    _type = \"organization\"\n    _icon_dir = \"resources/gis/organization\"\n\n\nclass Osgeo(_Organization):\n    _icon = \"osgeo.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/python.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Python(_GIS):\n    _type = \"python\"\n    _icon_dir = \"resources/gis/python\"\n\n\nclass Geopandas(_Python):\n    _icon = \"geopandas.png\"\n\n\nclass Pysal(_Python):\n    _icon = \"pysal.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/routing.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Routing(_GIS):\n    _type = \"routing\"\n    _icon_dir = \"resources/gis/routing\"\n\n\nclass Graphhopper(_Routing):\n    _icon = \"graphhopper.png\"\n\n\nclass Osrm(_Routing):\n    _icon = \"osrm.png\"\n\n\nclass Pgrouting(_Routing):\n    _icon = \"pgrouting.png\"\n\n\nclass Valhalla(_Routing):\n    _icon = \"valhalla.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/server.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Server(_GIS):\n    _type = \"server\"\n    _icon_dir = \"resources/gis/server\"\n\n\nclass Actinia(_Server):\n    _icon = \"actinia.png\"\n\n\nclass Baremaps(_Server):\n    _icon = \"baremaps.png\"\n\n\nclass Deegree(_Server):\n    _icon = \"deegree.png\"\n\n\nclass G3WSuite(_Server):\n    _icon = \"g3w-suite.png\"\n\n\nclass Geohealthcheck(_Server):\n    _icon = \"geohealthcheck.png\"\n\n\nclass Geomapfish(_Server):\n    _icon = \"geomapfish.png\"\n\n\nclass Geomesa(_Server):\n    _icon = \"geomesa.png\"\n\n\nclass Geonetwork(_Server):\n    _icon = \"geonetwork.png\"\n\n\nclass Geonode(_Server):\n    _icon = \"geonode.png\"\n\n\nclass Georchestra(_Server):\n    _icon = \"georchestra.png\"\n\n\nclass Geoserver(_Server):\n    _icon = \"geoserver.png\"\n\n\nclass Geowebcache(_Server):\n    _icon = \"geowebcache.png\"\n\n\nclass Kepler(_Server):\n    _icon = \"kepler.png\"\n\n\nclass Mapproxy(_Server):\n    _icon = \"mapproxy.png\"\n\n\nclass Mapserver(_Server):\n    _icon = \"mapserver.png\"\n\n\nclass Mapstore(_Server):\n    _icon = \"mapstore.png\"\n\n\nclass Mviewer(_Server):\n    _icon = \"mviewer.png\"\n\n\nclass Pg_Tileserv(_Server):\n    _icon = \"pg_tileserv.png\"\n\n\nclass Pycsw(_Server):\n    _icon = \"pycsw.png\"\n\n\nclass Pygeoapi(_Server):\n    _icon = \"pygeoapi.png\"\n\n\nclass QGISServer(_Server):\n    _icon = \"qgis-server.png\"\n\n\nclass Zooproject(_Server):\n    _icon = \"zooproject.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/gis/toolkit.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _GIS\n\n\nclass _Toolkit(_GIS):\n    _type = \"toolkit\"\n    _icon_dir = \"resources/gis/toolkit\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/__init__.py",
    "content": "\"\"\"\nIBM provides a set of services for IBM Cloud provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _IBM(Node):\n    _provider = \"ibm\"\n    _icon_dir = \"resources/ibm\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass IBM(_IBM):\n    _icon = \"ibm.png\"\n"
  },
  {
    "path": "diagrams/ibm/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Analytics(_IBM):\n    _type = \"analytics\"\n    _icon_dir = \"resources/ibm/analytics\"\n\n\nclass Analytics(_Analytics):\n    _icon = \"analytics.png\"\n\n\nclass DataIntegration(_Analytics):\n    _icon = \"data-integration.png\"\n\n\nclass DataRepositories(_Analytics):\n    _icon = \"data-repositories.png\"\n\n\nclass DeviceAnalytics(_Analytics):\n    _icon = \"device-analytics.png\"\n\n\nclass StreamingComputing(_Analytics):\n    _icon = \"streaming-computing.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/applications.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Applications(_IBM):\n    _type = \"applications\"\n    _icon_dir = \"resources/ibm/applications\"\n\n\nclass ActionableInsight(_Applications):\n    _icon = \"actionable-insight.png\"\n\n\nclass Annotate(_Applications):\n    _icon = \"annotate.png\"\n\n\nclass ApiDeveloperPortal(_Applications):\n    _icon = \"api-developer-portal.png\"\n\n\nclass ApiPolyglotRuntimes(_Applications):\n    _icon = \"api-polyglot-runtimes.png\"\n\n\nclass AppServer(_Applications):\n    _icon = \"app-server.png\"\n\n\nclass ApplicationLogic(_Applications):\n    _icon = \"application-logic.png\"\n\n\nclass EnterpriseApplications(_Applications):\n    _icon = \"enterprise-applications.png\"\n\n\nclass Index(_Applications):\n    _icon = \"index.png\"\n\n\nclass IotApplication(_Applications):\n    _icon = \"iot-application.png\"\n\n\nclass Microservice(_Applications):\n    _icon = \"microservice.png\"\n\n\nclass MobileApp(_Applications):\n    _icon = \"mobile-app.png\"\n\n\nclass Ontology(_Applications):\n    _icon = \"ontology.png\"\n\n\nclass OpenSourceTools(_Applications):\n    _icon = \"open-source-tools.png\"\n\n\nclass RuntimeServices(_Applications):\n    _icon = \"runtime-services.png\"\n\n\nclass SaasApplications(_Applications):\n    _icon = \"saas-applications.png\"\n\n\nclass ServiceBroker(_Applications):\n    _icon = \"service-broker.png\"\n\n\nclass SpeechToText(_Applications):\n    _icon = \"speech-to-text.png\"\n\n\nclass VisualRecognition(_Applications):\n    _icon = \"visual-recognition.png\"\n\n\nclass Visualization(_Applications):\n    _icon = \"visualization.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/blockchain.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Blockchain(_IBM):\n    _type = \"blockchain\"\n    _icon_dir = \"resources/ibm/blockchain\"\n\n\nclass BlockchainDeveloper(_Blockchain):\n    _icon = \"blockchain-developer.png\"\n\n\nclass Blockchain(_Blockchain):\n    _icon = \"blockchain.png\"\n\n\nclass CertificateAuthority(_Blockchain):\n    _icon = \"certificate-authority.png\"\n\n\nclass ClientApplication(_Blockchain):\n    _icon = \"client-application.png\"\n\n\nclass Communication(_Blockchain):\n    _icon = \"communication.png\"\n\n\nclass Consensus(_Blockchain):\n    _icon = \"consensus.png\"\n\n\nclass EventListener(_Blockchain):\n    _icon = \"event-listener.png\"\n\n\nclass Event(_Blockchain):\n    _icon = \"event.png\"\n\n\nclass ExistingEnterpriseSystems(_Blockchain):\n    _icon = \"existing-enterprise-systems.png\"\n\n\nclass HyperledgerFabric(_Blockchain):\n    _icon = \"hyperledger-fabric.png\"\n\n\nclass KeyManagement(_Blockchain):\n    _icon = \"key-management.png\"\n\n\nclass Ledger(_Blockchain):\n    _icon = \"ledger.png\"\n\n\nclass MembershipServicesProviderApi(_Blockchain):\n    _icon = \"membership-services-provider-api.png\"\n\n\nclass Membership(_Blockchain):\n    _icon = \"membership.png\"\n\n\nclass MessageBus(_Blockchain):\n    _icon = \"message-bus.png\"\n\n\nclass Node(_Blockchain):\n    _icon = \"node.png\"\n\n\nclass Services(_Blockchain):\n    _icon = \"services.png\"\n\n\nclass SmartContract(_Blockchain):\n    _icon = \"smart-contract.png\"\n\n\nclass TransactionManager(_Blockchain):\n    _icon = \"transaction-manager.png\"\n\n\nclass Wallet(_Blockchain):\n    _icon = \"wallet.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Compute(_IBM):\n    _type = \"compute\"\n    _icon_dir = \"resources/ibm/compute\"\n\n\nclass BareMetalServer(_Compute):\n    _icon = \"bare-metal-server.png\"\n\n\nclass ImageService(_Compute):\n    _icon = \"image-service.png\"\n\n\nclass Instance(_Compute):\n    _icon = \"instance.png\"\n\n\nclass Key(_Compute):\n    _icon = \"key.png\"\n\n\nclass PowerInstance(_Compute):\n    _icon = \"power-instance.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/data.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Data(_IBM):\n    _type = \"data\"\n    _icon_dir = \"resources/ibm/data\"\n\n\nclass Caches(_Data):\n    _icon = \"caches.png\"\n\n\nclass Cloud(_Data):\n    _icon = \"cloud.png\"\n\n\nclass ConversationTrainedDeployed(_Data):\n    _icon = \"conversation-trained-deployed.png\"\n\n\nclass DataServices(_Data):\n    _icon = \"data-services.png\"\n\n\nclass DataSources(_Data):\n    _icon = \"data-sources.png\"\n\n\nclass DeviceIdentityService(_Data):\n    _icon = \"device-identity-service.png\"\n\n\nclass DeviceRegistry(_Data):\n    _icon = \"device-registry.png\"\n\n\nclass EnterpriseData(_Data):\n    _icon = \"enterprise-data.png\"\n\n\nclass EnterpriseUserDirectory(_Data):\n    _icon = \"enterprise-user-directory.png\"\n\n\nclass FileRepository(_Data):\n    _icon = \"file-repository.png\"\n\n\nclass GroundTruth(_Data):\n    _icon = \"ground-truth.png\"\n\n\nclass Model(_Data):\n    _icon = \"model.png\"\n\n\nclass TmsDataInterface(_Data):\n    _icon = \"tms-data-interface.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/devops.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Devops(_IBM):\n    _type = \"devops\"\n    _icon_dir = \"resources/ibm/devops\"\n\n\nclass ArtifactManagement(_Devops):\n    _icon = \"artifact-management.png\"\n\n\nclass BuildTest(_Devops):\n    _icon = \"build-test.png\"\n\n\nclass CodeEditor(_Devops):\n    _icon = \"code-editor.png\"\n\n\nclass CollaborativeDevelopment(_Devops):\n    _icon = \"collaborative-development.png\"\n\n\nclass ConfigurationManagement(_Devops):\n    _icon = \"configuration-management.png\"\n\n\nclass ContinuousDeploy(_Devops):\n    _icon = \"continuous-deploy.png\"\n\n\nclass ContinuousTesting(_Devops):\n    _icon = \"continuous-testing.png\"\n\n\nclass Devops(_Devops):\n    _icon = \"devops.png\"\n\n\nclass Provision(_Devops):\n    _icon = \"provision.png\"\n\n\nclass ReleaseManagement(_Devops):\n    _icon = \"release-management.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/general.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _General(_IBM):\n    _type = \"general\"\n    _icon_dir = \"resources/ibm/general\"\n\n\nclass CloudMessaging(_General):\n    _icon = \"cloud-messaging.png\"\n\n\nclass CloudServices(_General):\n    _icon = \"cloud-services.png\"\n\n\nclass Cloudant(_General):\n    _icon = \"cloudant.png\"\n\n\nclass CognitiveServices(_General):\n    _icon = \"cognitive-services.png\"\n\n\nclass DataSecurity(_General):\n    _icon = \"data-security.png\"\n\n\nclass Enterprise(_General):\n    _icon = \"enterprise.png\"\n\n\nclass GovernanceRiskCompliance(_General):\n    _icon = \"governance-risk-compliance.png\"\n\n\nclass IBMContainers(_General):\n    _icon = \"ibm-containers.png\"\n\n\nclass IBMPublicCloud(_General):\n    _icon = \"ibm-public-cloud.png\"\n\n\nclass IdentityAccessManagement(_General):\n    _icon = \"identity-access-management.png\"\n\n\nclass IdentityProvider(_General):\n    _icon = \"identity-provider.png\"\n\n\nclass InfrastructureSecurity(_General):\n    _icon = \"infrastructure-security.png\"\n\n\nclass Internet(_General):\n    _icon = \"internet.png\"\n\n\nclass IotCloud(_General):\n    _icon = \"iot-cloud.png\"\n\n\nclass MicroservicesApplication(_General):\n    _icon = \"microservices-application.png\"\n\n\nclass MicroservicesMesh(_General):\n    _icon = \"microservices-mesh.png\"\n\n\nclass MonitoringLogging(_General):\n    _icon = \"monitoring-logging.png\"\n\n\nclass Monitoring(_General):\n    _icon = \"monitoring.png\"\n\n\nclass ObjectStorage(_General):\n    _icon = \"object-storage.png\"\n\n\nclass OfflineCapabilities(_General):\n    _icon = \"offline-capabilities.png\"\n\n\nclass Openwhisk(_General):\n    _icon = \"openwhisk.png\"\n\n\nclass PeerCloud(_General):\n    _icon = \"peer-cloud.png\"\n\n\nclass RetrieveRank(_General):\n    _icon = \"retrieve-rank.png\"\n\n\nclass Scalable(_General):\n    _icon = \"scalable.png\"\n\n\nclass ServiceDiscoveryConfiguration(_General):\n    _icon = \"service-discovery-configuration.png\"\n\n\nclass TextToSpeech(_General):\n    _icon = \"text-to-speech.png\"\n\n\nclass TransformationConnectivity(_General):\n    _icon = \"transformation-connectivity.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/infrastructure.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Infrastructure(_IBM):\n    _type = \"infrastructure\"\n    _icon_dir = \"resources/ibm/infrastructure\"\n\n\nclass Channels(_Infrastructure):\n    _icon = \"channels.png\"\n\n\nclass CloudMessaging(_Infrastructure):\n    _icon = \"cloud-messaging.png\"\n\n\nclass Dashboard(_Infrastructure):\n    _icon = \"dashboard.png\"\n\n\nclass Diagnostics(_Infrastructure):\n    _icon = \"diagnostics.png\"\n\n\nclass EdgeServices(_Infrastructure):\n    _icon = \"edge-services.png\"\n\n\nclass EnterpriseMessaging(_Infrastructure):\n    _icon = \"enterprise-messaging.png\"\n\n\nclass EventFeed(_Infrastructure):\n    _icon = \"event-feed.png\"\n\n\nclass InfrastructureServices(_Infrastructure):\n    _icon = \"infrastructure-services.png\"\n\n\nclass InterserviceCommunication(_Infrastructure):\n    _icon = \"interservice-communication.png\"\n\n\nclass LoadBalancingRouting(_Infrastructure):\n    _icon = \"load-balancing-routing.png\"\n\n\nclass MicroservicesMesh(_Infrastructure):\n    _icon = \"microservices-mesh.png\"\n\n\nclass MobileBackend(_Infrastructure):\n    _icon = \"mobile-backend.png\"\n\n\nclass MobileProviderNetwork(_Infrastructure):\n    _icon = \"mobile-provider-network.png\"\n\n\nclass MonitoringLogging(_Infrastructure):\n    _icon = \"monitoring-logging.png\"\n\n\nclass Monitoring(_Infrastructure):\n    _icon = \"monitoring.png\"\n\n\nclass PeerServices(_Infrastructure):\n    _icon = \"peer-services.png\"\n\n\nclass ServiceDiscoveryConfiguration(_Infrastructure):\n    _icon = \"service-discovery-configuration.png\"\n\n\nclass TransformationConnectivity(_Infrastructure):\n    _icon = \"transformation-connectivity.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/management.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Management(_IBM):\n    _type = \"management\"\n    _icon_dir = \"resources/ibm/management\"\n\n\nclass AlertNotification(_Management):\n    _icon = \"alert-notification.png\"\n\n\nclass ApiManagement(_Management):\n    _icon = \"api-management.png\"\n\n\nclass CloudManagement(_Management):\n    _icon = \"cloud-management.png\"\n\n\nclass ClusterManagement(_Management):\n    _icon = \"cluster-management.png\"\n\n\nclass ContentManagement(_Management):\n    _icon = \"content-management.png\"\n\n\nclass DataServices(_Management):\n    _icon = \"data-services.png\"\n\n\nclass DeviceManagement(_Management):\n    _icon = \"device-management.png\"\n\n\nclass InformationGovernance(_Management):\n    _icon = \"information-governance.png\"\n\n\nclass ItServiceManagement(_Management):\n    _icon = \"it-service-management.png\"\n\n\nclass Management(_Management):\n    _icon = \"management.png\"\n\n\nclass MonitoringMetrics(_Management):\n    _icon = \"monitoring-metrics.png\"\n\n\nclass ProcessManagement(_Management):\n    _icon = \"process-management.png\"\n\n\nclass ProviderCloudPortalService(_Management):\n    _icon = \"provider-cloud-portal-service.png\"\n\n\nclass PushNotifications(_Management):\n    _icon = \"push-notifications.png\"\n\n\nclass ServiceManagementTools(_Management):\n    _icon = \"service-management-tools.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Network(_IBM):\n    _type = \"network\"\n    _icon_dir = \"resources/ibm/network\"\n\n\nclass Bridge(_Network):\n    _icon = \"bridge.png\"\n\n\nclass DirectLink(_Network):\n    _icon = \"direct-link.png\"\n\n\nclass Enterprise(_Network):\n    _icon = \"enterprise.png\"\n\n\nclass Firewall(_Network):\n    _icon = \"firewall.png\"\n\n\nclass FloatingIp(_Network):\n    _icon = \"floating-ip.png\"\n\n\nclass Gateway(_Network):\n    _icon = \"gateway.png\"\n\n\nclass InternetServices(_Network):\n    _icon = \"internet-services.png\"\n\n\nclass LoadBalancerListener(_Network):\n    _icon = \"load-balancer-listener.png\"\n\n\nclass LoadBalancerPool(_Network):\n    _icon = \"load-balancer-pool.png\"\n\n\nclass LoadBalancer(_Network):\n    _icon = \"load-balancer.png\"\n\n\nclass LoadBalancingRouting(_Network):\n    _icon = \"load-balancing-routing.png\"\n\n\nclass PublicGateway(_Network):\n    _icon = \"public-gateway.png\"\n\n\nclass Region(_Network):\n    _icon = \"region.png\"\n\n\nclass Router(_Network):\n    _icon = \"router.png\"\n\n\nclass Rules(_Network):\n    _icon = \"rules.png\"\n\n\nclass Subnet(_Network):\n    _icon = \"subnet.png\"\n\n\nclass TransitGateway(_Network):\n    _icon = \"transit-gateway.png\"\n\n\nclass Vpc(_Network):\n    _icon = \"vpc.png\"\n\n\nclass VpnConnection(_Network):\n    _icon = \"vpn-connection.png\"\n\n\nclass VpnGateway(_Network):\n    _icon = \"vpn-gateway.png\"\n\n\nclass VpnPolicy(_Network):\n    _icon = \"vpn-policy.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Security(_IBM):\n    _type = \"security\"\n    _icon_dir = \"resources/ibm/security\"\n\n\nclass ApiSecurity(_Security):\n    _icon = \"api-security.png\"\n\n\nclass BlockchainSecurityService(_Security):\n    _icon = \"blockchain-security-service.png\"\n\n\nclass DataSecurity(_Security):\n    _icon = \"data-security.png\"\n\n\nclass Firewall(_Security):\n    _icon = \"firewall.png\"\n\n\nclass Gateway(_Security):\n    _icon = \"gateway.png\"\n\n\nclass GovernanceRiskCompliance(_Security):\n    _icon = \"governance-risk-compliance.png\"\n\n\nclass IdentityAccessManagement(_Security):\n    _icon = \"identity-access-management.png\"\n\n\nclass IdentityProvider(_Security):\n    _icon = \"identity-provider.png\"\n\n\nclass InfrastructureSecurity(_Security):\n    _icon = \"infrastructure-security.png\"\n\n\nclass PhysicalSecurity(_Security):\n    _icon = \"physical-security.png\"\n\n\nclass SecurityMonitoringIntelligence(_Security):\n    _icon = \"security-monitoring-intelligence.png\"\n\n\nclass SecurityServices(_Security):\n    _icon = \"security-services.png\"\n\n\nclass TrustendComputing(_Security):\n    _icon = \"trustend-computing.png\"\n\n\nclass Vpn(_Security):\n    _icon = \"vpn.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/social.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Social(_IBM):\n    _type = \"social\"\n    _icon_dir = \"resources/ibm/social\"\n\n\nclass Communities(_Social):\n    _icon = \"communities.png\"\n\n\nclass FileSync(_Social):\n    _icon = \"file-sync.png\"\n\n\nclass LiveCollaboration(_Social):\n    _icon = \"live-collaboration.png\"\n\n\nclass Messaging(_Social):\n    _icon = \"messaging.png\"\n\n\nclass Networking(_Social):\n    _icon = \"networking.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _Storage(_IBM):\n    _type = \"storage\"\n    _icon_dir = \"resources/ibm/storage\"\n\n\nclass BlockStorage(_Storage):\n    _icon = \"block-storage.png\"\n\n\nclass ObjectStorage(_Storage):\n    _icon = \"object-storage.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/ibm/user.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _IBM\n\n\nclass _User(_IBM):\n    _type = \"user\"\n    _icon_dir = \"resources/ibm/user\"\n\n\nclass Browser(_User):\n    _icon = \"browser.png\"\n\n\nclass Device(_User):\n    _icon = \"device.png\"\n\n\nclass IntegratedDigitalExperiences(_User):\n    _icon = \"integrated-digital-experiences.png\"\n\n\nclass PhysicalEntity(_User):\n    _icon = \"physical-entity.png\"\n\n\nclass Sensor(_User):\n    _icon = \"sensor.png\"\n\n\nclass User(_User):\n    _icon = \"user.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/k8s/__init__.py",
    "content": "\"\"\"\nK8S provides a set of services for Kubernetes.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _K8S(Node):\n    _provider = \"k8s\"\n    _icon_dir = \"resources/k8s\"\n\n    fontcolor = \"#2d3436\"\n\n\nclass K8S(_K8S):\n    _icon = \"k8s.png\"\n"
  },
  {
    "path": "diagrams/k8s/chaos.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Chaos(_K8S):\n    _type = \"chaos\"\n    _icon_dir = \"resources/k8s/chaos\"\n\n\nclass ChaosMesh(_Chaos):\n    _icon = \"chaos-mesh.png\"\n\n\nclass LitmusChaos(_Chaos):\n    _icon = \"litmus-chaos.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/k8s/clusterconfig.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Clusterconfig(_K8S):\n    _type = \"clusterconfig\"\n    _icon_dir = \"resources/k8s/clusterconfig\"\n\n\nclass HPA(_Clusterconfig):\n    _icon = \"hpa.png\"\n\n\nclass Limits(_Clusterconfig):\n    _icon = \"limits.png\"\n\n\nclass Quota(_Clusterconfig):\n    _icon = \"quota.png\"\n\n\n# Aliases\n\nLimitRange = Limits\nHorizontalPodAutoscaler = HPA\n"
  },
  {
    "path": "diagrams/k8s/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Compute(_K8S):\n    _type = \"compute\"\n    _icon_dir = \"resources/k8s/compute\"\n\n\nclass Cronjob(_Compute):\n    _icon = \"cronjob.png\"\n\n\nclass Deploy(_Compute):\n    _icon = \"deploy.png\"\n\n\nclass DS(_Compute):\n    _icon = \"ds.png\"\n\n\nclass Job(_Compute):\n    _icon = \"job.png\"\n\n\nclass Pod(_Compute):\n    _icon = \"pod.png\"\n\n\nclass RS(_Compute):\n    _icon = \"rs.png\"\n\n\nclass STS(_Compute):\n    _icon = \"sts.png\"\n\n\n# Aliases\n\nDeployment = Deploy\nDaemonSet = DS\nReplicaSet = RS\nStatefulSet = STS\n"
  },
  {
    "path": "diagrams/k8s/controlplane.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Controlplane(_K8S):\n    _type = \"controlplane\"\n    _icon_dir = \"resources/k8s/controlplane\"\n\n\nclass API(_Controlplane):\n    _icon = \"api.png\"\n\n\nclass CCM(_Controlplane):\n    _icon = \"c-c-m.png\"\n\n\nclass CM(_Controlplane):\n    _icon = \"c-m.png\"\n\n\nclass KProxy(_Controlplane):\n    _icon = \"k-proxy.png\"\n\n\nclass Kubelet(_Controlplane):\n    _icon = \"kubelet.png\"\n\n\nclass Sched(_Controlplane):\n    _icon = \"sched.png\"\n\n\n# Aliases\n\nAPIServer = API\nControllerManager = CM\nKubeProxy = KProxy\nScheduler = Sched\n"
  },
  {
    "path": "diagrams/k8s/ecosystem.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Ecosystem(_K8S):\n    _type = \"ecosystem\"\n    _icon_dir = \"resources/k8s/ecosystem\"\n\n\nclass ExternalDns(_Ecosystem):\n    _icon = \"external-dns.png\"\n\n\nclass Helm(_Ecosystem):\n    _icon = \"helm.png\"\n\n\nclass Krew(_Ecosystem):\n    _icon = \"krew.png\"\n\n\nclass Kustomize(_Ecosystem):\n    _icon = \"kustomize.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/k8s/group.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Group(_K8S):\n    _type = \"group\"\n    _icon_dir = \"resources/k8s/group\"\n\n\nclass NS(_Group):\n    _icon = \"ns.png\"\n\n\n# Aliases\n\nNamespace = NS\n"
  },
  {
    "path": "diagrams/k8s/infra.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Infra(_K8S):\n    _type = \"infra\"\n    _icon_dir = \"resources/k8s/infra\"\n\n\nclass ETCD(_Infra):\n    _icon = \"etcd.png\"\n\n\nclass Master(_Infra):\n    _icon = \"master.png\"\n\n\nclass Node(_Infra):\n    _icon = \"node.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/k8s/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Network(_K8S):\n    _type = \"network\"\n    _icon_dir = \"resources/k8s/network\"\n\n\nclass Ep(_Network):\n    _icon = \"ep.png\"\n\n\nclass Ing(_Network):\n    _icon = \"ing.png\"\n\n\nclass Netpol(_Network):\n    _icon = \"netpol.png\"\n\n\nclass SVC(_Network):\n    _icon = \"svc.png\"\n\n\n# Aliases\n\nEndpoint = Ep\nIngress = Ing\nNetworkPolicy = Netpol\nService = SVC\n"
  },
  {
    "path": "diagrams/k8s/others.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Others(_K8S):\n    _type = \"others\"\n    _icon_dir = \"resources/k8s/others\"\n\n\nclass CRD(_Others):\n    _icon = \"crd.png\"\n\n\nclass PSP(_Others):\n    _icon = \"psp.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/k8s/podconfig.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Podconfig(_K8S):\n    _type = \"podconfig\"\n    _icon_dir = \"resources/k8s/podconfig\"\n\n\nclass CM(_Podconfig):\n    _icon = \"cm.png\"\n\n\nclass Secret(_Podconfig):\n    _icon = \"secret.png\"\n\n\n# Aliases\n\nConfigMap = CM\n"
  },
  {
    "path": "diagrams/k8s/rbac.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Rbac(_K8S):\n    _type = \"rbac\"\n    _icon_dir = \"resources/k8s/rbac\"\n\n\nclass CRole(_Rbac):\n    _icon = \"c-role.png\"\n\n\nclass CRB(_Rbac):\n    _icon = \"crb.png\"\n\n\nclass Group(_Rbac):\n    _icon = \"group.png\"\n\n\nclass RB(_Rbac):\n    _icon = \"rb.png\"\n\n\nclass Role(_Rbac):\n    _icon = \"role.png\"\n\n\nclass SA(_Rbac):\n    _icon = \"sa.png\"\n\n\nclass User(_Rbac):\n    _icon = \"user.png\"\n\n\n# Aliases\n\nClusterRole = CRole\nClusterRoleBinding = CRB\nRoleBinding = RB\nServiceAccount = SA\n"
  },
  {
    "path": "diagrams/k8s/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _K8S\n\n\nclass _Storage(_K8S):\n    _type = \"storage\"\n    _icon_dir = \"resources/k8s/storage\"\n\n\nclass PV(_Storage):\n    _icon = \"pv.png\"\n\n\nclass PVC(_Storage):\n    _icon = \"pvc.png\"\n\n\nclass SC(_Storage):\n    _icon = \"sc.png\"\n\n\nclass Vol(_Storage):\n    _icon = \"vol.png\"\n\n\n# Aliases\n\nPersistentVolume = PV\nPersistentVolumeClaim = PVC\nStorageClass = SC\nVolume = Vol\n"
  },
  {
    "path": "diagrams/oci/__init__.py",
    "content": "\"\"\"\nOCI provides a set of services for Oracle Cloud Infrastructure provider.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _OCI(Node):\n    _provider = \"oci\"\n    _icon_dir = \"resources/oci\"\n\n    fontcolor = \"#312D2A\"\n\n\nclass OCI(_OCI):\n    _icon = \"oci.png\"\n"
  },
  {
    "path": "diagrams/oci/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Compute(_OCI):\n    _type = \"compute\"\n    _icon_dir = \"resources/oci/compute\"\n\n\nclass AutoscaleWhite(_Compute):\n    _icon = \"autoscale-white.png\"\n\n\nclass Autoscale(_Compute):\n    _icon = \"autoscale.png\"\n\n\nclass BMWhite(_Compute):\n    _icon = \"bm-white.png\"\n\n\nclass BM(_Compute):\n    _icon = \"bm.png\"\n\n\nclass ContainerWhite(_Compute):\n    _icon = \"container-white.png\"\n\n\nclass Container(_Compute):\n    _icon = \"container.png\"\n\n\nclass FunctionsWhite(_Compute):\n    _icon = \"functions-white.png\"\n\n\nclass Functions(_Compute):\n    _icon = \"functions.png\"\n\n\nclass InstancePoolsWhite(_Compute):\n    _icon = \"instance-pools-white.png\"\n\n\nclass InstancePools(_Compute):\n    _icon = \"instance-pools.png\"\n\n\nclass OCIRWhite(_Compute):\n    _icon = \"ocir-white.png\"\n\n\nclass OCIR(_Compute):\n    _icon = \"ocir.png\"\n\n\nclass OKEWhite(_Compute):\n    _icon = \"oke-white.png\"\n\n\nclass OKE(_Compute):\n    _icon = \"oke.png\"\n\n\nclass VMWhite(_Compute):\n    _icon = \"vm-white.png\"\n\n\nclass VM(_Compute):\n    _icon = \"vm.png\"\n\n\n# Aliases\n\nVirtualMachine = VM\nVirtualMachineWhite = VMWhite\nBareMetal = BM\nBareMetalWhite = BMWhite\nOCIRegistry = OCIR\nOCIRegistryWhite = OCIRWhite\nContainerEngine = OKE\nContainerEngineWhite = OKEWhite\n"
  },
  {
    "path": "diagrams/oci/connectivity.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Connectivity(_OCI):\n    _type = \"connectivity\"\n    _icon_dir = \"resources/oci/connectivity\"\n\n\nclass BackboneWhite(_Connectivity):\n    _icon = \"backbone-white.png\"\n\n\nclass Backbone(_Connectivity):\n    _icon = \"backbone.png\"\n\n\nclass CDNWhite(_Connectivity):\n    _icon = \"cdn-white.png\"\n\n\nclass CDN(_Connectivity):\n    _icon = \"cdn.png\"\n\n\nclass CustomerDatacenter(_Connectivity):\n    _icon = \"customer-datacenter.png\"\n\n\nclass CustomerDatacntrWhite(_Connectivity):\n    _icon = \"customer-datacntr-white.png\"\n\n\nclass CustomerPremisesWhite(_Connectivity):\n    _icon = \"customer-premises-white.png\"\n\n\nclass CustomerPremises(_Connectivity):\n    _icon = \"customer-premises.png\"\n\n\nclass DisconnectedRegionsWhite(_Connectivity):\n    _icon = \"disconnected-regions-white.png\"\n\n\nclass DisconnectedRegions(_Connectivity):\n    _icon = \"disconnected-regions.png\"\n\n\nclass DNSWhite(_Connectivity):\n    _icon = \"dns-white.png\"\n\n\nclass DNS(_Connectivity):\n    _icon = \"dns.png\"\n\n\nclass FastConnectWhite(_Connectivity):\n    _icon = \"fast-connect-white.png\"\n\n\nclass FastConnect(_Connectivity):\n    _icon = \"fast-connect.png\"\n\n\nclass NATGatewayWhite(_Connectivity):\n    _icon = \"nat-gateway-white.png\"\n\n\nclass NATGateway(_Connectivity):\n    _icon = \"nat-gateway.png\"\n\n\nclass VPNWhite(_Connectivity):\n    _icon = \"vpn-white.png\"\n\n\nclass VPN(_Connectivity):\n    _icon = \"vpn.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Database(_OCI):\n    _type = \"database\"\n    _icon_dir = \"resources/oci/database\"\n\n\nclass AutonomousWhite(_Database):\n    _icon = \"autonomous-white.png\"\n\n\nclass Autonomous(_Database):\n    _icon = \"autonomous.png\"\n\n\nclass BigdataServiceWhite(_Database):\n    _icon = \"bigdata-service-white.png\"\n\n\nclass BigdataService(_Database):\n    _icon = \"bigdata-service.png\"\n\n\nclass DatabaseServiceWhite(_Database):\n    _icon = \"database-service-white.png\"\n\n\nclass DatabaseService(_Database):\n    _icon = \"database-service.png\"\n\n\nclass DataflowApacheWhite(_Database):\n    _icon = \"dataflow-apache-white.png\"\n\n\nclass DataflowApache(_Database):\n    _icon = \"dataflow-apache.png\"\n\n\nclass DcatWhite(_Database):\n    _icon = \"dcat-white.png\"\n\n\nclass Dcat(_Database):\n    _icon = \"dcat.png\"\n\n\nclass DisWhite(_Database):\n    _icon = \"dis-white.png\"\n\n\nclass Dis(_Database):\n    _icon = \"dis.png\"\n\n\nclass DMSWhite(_Database):\n    _icon = \"dms-white.png\"\n\n\nclass DMS(_Database):\n    _icon = \"dms.png\"\n\n\nclass ScienceWhite(_Database):\n    _icon = \"science-white.png\"\n\n\nclass Science(_Database):\n    _icon = \"science.png\"\n\n\nclass StreamWhite(_Database):\n    _icon = \"stream-white.png\"\n\n\nclass Stream(_Database):\n    _icon = \"stream.png\"\n\n\n# Aliases\n\nADB = Autonomous\nADBWhite = AutonomousWhite\nDBService = DatabaseService\nDBServiceWhite = DatabaseServiceWhite\n"
  },
  {
    "path": "diagrams/oci/devops.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Devops(_OCI):\n    _type = \"devops\"\n    _icon_dir = \"resources/oci/devops\"\n\n\nclass APIGatewayWhite(_Devops):\n    _icon = \"api-gateway-white.png\"\n\n\nclass APIGateway(_Devops):\n    _icon = \"api-gateway.png\"\n\n\nclass APIServiceWhite(_Devops):\n    _icon = \"api-service-white.png\"\n\n\nclass APIService(_Devops):\n    _icon = \"api-service.png\"\n\n\nclass ResourceMgmtWhite(_Devops):\n    _icon = \"resource-mgmt-white.png\"\n\n\nclass ResourceMgmt(_Devops):\n    _icon = \"resource-mgmt.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/governance.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Governance(_OCI):\n    _type = \"governance\"\n    _icon_dir = \"resources/oci/governance\"\n\n\nclass AuditWhite(_Governance):\n    _icon = \"audit-white.png\"\n\n\nclass Audit(_Governance):\n    _icon = \"audit.png\"\n\n\nclass CompartmentsWhite(_Governance):\n    _icon = \"compartments-white.png\"\n\n\nclass Compartments(_Governance):\n    _icon = \"compartments.png\"\n\n\nclass GroupsWhite(_Governance):\n    _icon = \"groups-white.png\"\n\n\nclass Groups(_Governance):\n    _icon = \"groups.png\"\n\n\nclass LoggingWhite(_Governance):\n    _icon = \"logging-white.png\"\n\n\nclass Logging(_Governance):\n    _icon = \"logging.png\"\n\n\nclass OCIDWhite(_Governance):\n    _icon = \"ocid-white.png\"\n\n\nclass OCID(_Governance):\n    _icon = \"ocid.png\"\n\n\nclass PoliciesWhite(_Governance):\n    _icon = \"policies-white.png\"\n\n\nclass Policies(_Governance):\n    _icon = \"policies.png\"\n\n\nclass TaggingWhite(_Governance):\n    _icon = \"tagging-white.png\"\n\n\nclass Tagging(_Governance):\n    _icon = \"tagging.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/monitoring.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Monitoring(_OCI):\n    _type = \"monitoring\"\n    _icon_dir = \"resources/oci/monitoring\"\n\n\nclass AlarmWhite(_Monitoring):\n    _icon = \"alarm-white.png\"\n\n\nclass Alarm(_Monitoring):\n    _icon = \"alarm.png\"\n\n\nclass EmailWhite(_Monitoring):\n    _icon = \"email-white.png\"\n\n\nclass Email(_Monitoring):\n    _icon = \"email.png\"\n\n\nclass EventsWhite(_Monitoring):\n    _icon = \"events-white.png\"\n\n\nclass Events(_Monitoring):\n    _icon = \"events.png\"\n\n\nclass HealthCheckWhite(_Monitoring):\n    _icon = \"health-check-white.png\"\n\n\nclass HealthCheck(_Monitoring):\n    _icon = \"health-check.png\"\n\n\nclass NotificationsWhite(_Monitoring):\n    _icon = \"notifications-white.png\"\n\n\nclass Notifications(_Monitoring):\n    _icon = \"notifications.png\"\n\n\nclass QueueWhite(_Monitoring):\n    _icon = \"queue-white.png\"\n\n\nclass Queue(_Monitoring):\n    _icon = \"queue.png\"\n\n\nclass SearchWhite(_Monitoring):\n    _icon = \"search-white.png\"\n\n\nclass Search(_Monitoring):\n    _icon = \"search.png\"\n\n\nclass TelemetryWhite(_Monitoring):\n    _icon = \"telemetry-white.png\"\n\n\nclass Telemetry(_Monitoring):\n    _icon = \"telemetry.png\"\n\n\nclass WorkflowWhite(_Monitoring):\n    _icon = \"workflow-white.png\"\n\n\nclass Workflow(_Monitoring):\n    _icon = \"workflow.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Network(_OCI):\n    _type = \"network\"\n    _icon_dir = \"resources/oci/network\"\n\n\nclass DrgWhite(_Network):\n    _icon = \"drg-white.png\"\n\n\nclass Drg(_Network):\n    _icon = \"drg.png\"\n\n\nclass FirewallWhite(_Network):\n    _icon = \"firewall-white.png\"\n\n\nclass Firewall(_Network):\n    _icon = \"firewall.png\"\n\n\nclass InternetGatewayWhite(_Network):\n    _icon = \"internet-gateway-white.png\"\n\n\nclass InternetGateway(_Network):\n    _icon = \"internet-gateway.png\"\n\n\nclass LoadBalancerWhite(_Network):\n    _icon = \"load-balancer-white.png\"\n\n\nclass LoadBalancer(_Network):\n    _icon = \"load-balancer.png\"\n\n\nclass RouteTableWhite(_Network):\n    _icon = \"route-table-white.png\"\n\n\nclass RouteTable(_Network):\n    _icon = \"route-table.png\"\n\n\nclass SecurityListsWhite(_Network):\n    _icon = \"security-lists-white.png\"\n\n\nclass SecurityLists(_Network):\n    _icon = \"security-lists.png\"\n\n\nclass ServiceGatewayWhite(_Network):\n    _icon = \"service-gateway-white.png\"\n\n\nclass ServiceGateway(_Network):\n    _icon = \"service-gateway.png\"\n\n\nclass VcnWhite(_Network):\n    _icon = \"vcn-white.png\"\n\n\nclass Vcn(_Network):\n    _icon = \"vcn.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Security(_OCI):\n    _type = \"security\"\n    _icon_dir = \"resources/oci/security\"\n\n\nclass CloudGuardWhite(_Security):\n    _icon = \"cloud-guard-white.png\"\n\n\nclass CloudGuard(_Security):\n    _icon = \"cloud-guard.png\"\n\n\nclass DDOSWhite(_Security):\n    _icon = \"ddos-white.png\"\n\n\nclass DDOS(_Security):\n    _icon = \"ddos.png\"\n\n\nclass EncryptionWhite(_Security):\n    _icon = \"encryption-white.png\"\n\n\nclass Encryption(_Security):\n    _icon = \"encryption.png\"\n\n\nclass IDAccessWhite(_Security):\n    _icon = \"id-access-white.png\"\n\n\nclass IDAccess(_Security):\n    _icon = \"id-access.png\"\n\n\nclass KeyManagementWhite(_Security):\n    _icon = \"key-management-white.png\"\n\n\nclass KeyManagement(_Security):\n    _icon = \"key-management.png\"\n\n\nclass MaxSecurityZoneWhite(_Security):\n    _icon = \"max-security-zone-white.png\"\n\n\nclass MaxSecurityZone(_Security):\n    _icon = \"max-security-zone.png\"\n\n\nclass VaultWhite(_Security):\n    _icon = \"vault-white.png\"\n\n\nclass Vault(_Security):\n    _icon = \"vault.png\"\n\n\nclass WAFWhite(_Security):\n    _icon = \"waf-white.png\"\n\n\nclass WAF(_Security):\n    _icon = \"waf.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/oci/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OCI\n\n\nclass _Storage(_OCI):\n    _type = \"storage\"\n    _icon_dir = \"resources/oci/storage\"\n\n\nclass BackupRestoreWhite(_Storage):\n    _icon = \"backup-restore-white.png\"\n\n\nclass BackupRestore(_Storage):\n    _icon = \"backup-restore.png\"\n\n\nclass BlockStorageCloneWhite(_Storage):\n    _icon = \"block-storage-clone-white.png\"\n\n\nclass BlockStorageClone(_Storage):\n    _icon = \"block-storage-clone.png\"\n\n\nclass BlockStorageWhite(_Storage):\n    _icon = \"block-storage-white.png\"\n\n\nclass BlockStorage(_Storage):\n    _icon = \"block-storage.png\"\n\n\nclass BucketsWhite(_Storage):\n    _icon = \"buckets-white.png\"\n\n\nclass Buckets(_Storage):\n    _icon = \"buckets.png\"\n\n\nclass DataTransferWhite(_Storage):\n    _icon = \"data-transfer-white.png\"\n\n\nclass DataTransfer(_Storage):\n    _icon = \"data-transfer.png\"\n\n\nclass ElasticPerformanceWhite(_Storage):\n    _icon = \"elastic-performance-white.png\"\n\n\nclass ElasticPerformance(_Storage):\n    _icon = \"elastic-performance.png\"\n\n\nclass FileStorageWhite(_Storage):\n    _icon = \"file-storage-white.png\"\n\n\nclass FileStorage(_Storage):\n    _icon = \"file-storage.png\"\n\n\nclass ObjectStorageWhite(_Storage):\n    _icon = \"object-storage-white.png\"\n\n\nclass ObjectStorage(_Storage):\n    _icon = \"object-storage.png\"\n\n\nclass StorageGatewayWhite(_Storage):\n    _icon = \"storage-gateway-white.png\"\n\n\nclass StorageGateway(_Storage):\n    _icon = \"storage-gateway.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/__init__.py",
    "content": "\"\"\"\nOnPrem provides a set of general on-premises services.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _OnPrem(Node):\n    _provider = \"onprem\"\n    _icon_dir = \"resources/onprem\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass OnPrem(_OnPrem):\n    _icon = \"onprem.png\"\n"
  },
  {
    "path": "diagrams/onprem/aggregator.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Aggregator(_OnPrem):\n    _type = \"aggregator\"\n    _icon_dir = \"resources/onprem/aggregator\"\n\n\nclass Fluentd(_Aggregator):\n    _icon = \"fluentd.png\"\n\n\nclass Vector(_Aggregator):\n    _icon = \"vector.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Analytics(_OnPrem):\n    _type = \"analytics\"\n    _icon_dir = \"resources/onprem/analytics\"\n\n\nclass Beam(_Analytics):\n    _icon = \"beam.png\"\n\n\nclass Databricks(_Analytics):\n    _icon = \"databricks.png\"\n\n\nclass Dbt(_Analytics):\n    _icon = \"dbt.png\"\n\n\nclass Dremio(_Analytics):\n    _icon = \"dremio.png\"\n\n\nclass Flink(_Analytics):\n    _icon = \"flink.png\"\n\n\nclass Hadoop(_Analytics):\n    _icon = \"hadoop.png\"\n\n\nclass Hive(_Analytics):\n    _icon = \"hive.png\"\n\n\nclass Metabase(_Analytics):\n    _icon = \"metabase.png\"\n\n\nclass Norikra(_Analytics):\n    _icon = \"norikra.png\"\n\n\nclass Powerbi(_Analytics):\n    _icon = \"powerbi.png\"\n\n\nclass Presto(_Analytics):\n    _icon = \"presto.png\"\n\n\nclass Singer(_Analytics):\n    _icon = \"singer.png\"\n\n\nclass Spark(_Analytics):\n    _icon = \"spark.png\"\n\n\nclass Storm(_Analytics):\n    _icon = \"storm.png\"\n\n\nclass Superset(_Analytics):\n    _icon = \"superset.png\"\n\n\nclass Tableau(_Analytics):\n    _icon = \"tableau.png\"\n\n\nclass Trino(_Analytics):\n    _icon = \"trino.png\"\n\n\n# Aliases\n\nPowerBI = Powerbi\n"
  },
  {
    "path": "diagrams/onprem/auth.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Auth(_OnPrem):\n    _type = \"auth\"\n    _icon_dir = \"resources/onprem/auth\"\n\n\nclass Boundary(_Auth):\n    _icon = \"boundary.png\"\n\n\nclass BuzzfeedSso(_Auth):\n    _icon = \"buzzfeed-sso.png\"\n\n\nclass Oauth2Proxy(_Auth):\n    _icon = \"oauth2-proxy.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/cd.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Cd(_OnPrem):\n    _type = \"cd\"\n    _icon_dir = \"resources/onprem/cd\"\n\n\nclass Spinnaker(_Cd):\n    _icon = \"spinnaker.png\"\n\n\nclass TektonCli(_Cd):\n    _icon = \"tekton-cli.png\"\n\n\nclass Tekton(_Cd):\n    _icon = \"tekton.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/certificates.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Certificates(_OnPrem):\n    _type = \"certificates\"\n    _icon_dir = \"resources/onprem/certificates\"\n\n\nclass CertManager(_Certificates):\n    _icon = \"cert-manager.png\"\n\n\nclass LetsEncrypt(_Certificates):\n    _icon = \"lets-encrypt.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/ci.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Ci(_OnPrem):\n    _type = \"ci\"\n    _icon_dir = \"resources/onprem/ci\"\n\n\nclass Circleci(_Ci):\n    _icon = \"circleci.png\"\n\n\nclass Concourseci(_Ci):\n    _icon = \"concourseci.png\"\n\n\nclass Droneci(_Ci):\n    _icon = \"droneci.png\"\n\n\nclass GithubActions(_Ci):\n    _icon = \"github-actions.png\"\n\n\nclass Gitlabci(_Ci):\n    _icon = \"gitlabci.png\"\n\n\nclass Jenkins(_Ci):\n    _icon = \"jenkins.png\"\n\n\nclass Teamcity(_Ci):\n    _icon = \"teamcity.png\"\n\n\nclass Travisci(_Ci):\n    _icon = \"travisci.png\"\n\n\nclass Zuulci(_Ci):\n    _icon = \"zuulci.png\"\n\n\n# Aliases\n\nCircleCI = Circleci\nConcourseCI = Concourseci\nDroneCI = Droneci\nGitlabCI = Gitlabci\nTravisCI = Travisci\nTC = Teamcity\nZuulCI = Zuulci\n"
  },
  {
    "path": "diagrams/onprem/client.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Client(_OnPrem):\n    _type = \"client\"\n    _icon_dir = \"resources/onprem/client\"\n\n\nclass Client(_Client):\n    _icon = \"client.png\"\n\n\nclass User(_Client):\n    _icon = \"user.png\"\n\n\nclass Users(_Client):\n    _icon = \"users.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Compute(_OnPrem):\n    _type = \"compute\"\n    _icon_dir = \"resources/onprem/compute\"\n\n\nclass Nomad(_Compute):\n    _icon = \"nomad.png\"\n\n\nclass Server(_Compute):\n    _icon = \"server.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/container.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Container(_OnPrem):\n    _type = \"container\"\n    _icon_dir = \"resources/onprem/container\"\n\n\nclass Containerd(_Container):\n    _icon = \"containerd.png\"\n\n\nclass Crio(_Container):\n    _icon = \"crio.png\"\n\n\nclass Docker(_Container):\n    _icon = \"docker.png\"\n\n\nclass Firecracker(_Container):\n    _icon = \"firecracker.png\"\n\n\nclass Gvisor(_Container):\n    _icon = \"gvisor.png\"\n\n\nclass K3S(_Container):\n    _icon = \"k3s.png\"\n\n\nclass Lxc(_Container):\n    _icon = \"lxc.png\"\n\n\nclass Rkt(_Container):\n    _icon = \"rkt.png\"\n\n\n# Aliases\n\nLXC = Lxc\nRKT = Rkt\n"
  },
  {
    "path": "diagrams/onprem/database.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Database(_OnPrem):\n    _type = \"database\"\n    _icon_dir = \"resources/onprem/database\"\n\n\nclass Cassandra(_Database):\n    _icon = \"cassandra.png\"\n\n\nclass Clickhouse(_Database):\n    _icon = \"clickhouse.png\"\n\n\nclass Cockroachdb(_Database):\n    _icon = \"cockroachdb.png\"\n\n\nclass Couchbase(_Database):\n    _icon = \"couchbase.png\"\n\n\nclass Couchdb(_Database):\n    _icon = \"couchdb.png\"\n\n\nclass Dgraph(_Database):\n    _icon = \"dgraph.png\"\n\n\nclass Druid(_Database):\n    _icon = \"druid.png\"\n\n\nclass Duckdb(_Database):\n    _icon = \"duckdb.png\"\n\n\nclass Hbase(_Database):\n    _icon = \"hbase.png\"\n\n\nclass Influxdb(_Database):\n    _icon = \"influxdb.png\"\n\n\nclass Janusgraph(_Database):\n    _icon = \"janusgraph.png\"\n\n\nclass Mariadb(_Database):\n    _icon = \"mariadb.png\"\n\n\nclass Mongodb(_Database):\n    _icon = \"mongodb.png\"\n\n\nclass Mssql(_Database):\n    _icon = \"mssql.png\"\n\n\nclass Mysql(_Database):\n    _icon = \"mysql.png\"\n\n\nclass Neo4J(_Database):\n    _icon = \"neo4j.png\"\n\n\nclass Oracle(_Database):\n    _icon = \"oracle.png\"\n\n\nclass Postgresql(_Database):\n    _icon = \"postgresql.png\"\n\n\nclass Qdrant(_Database):\n    _icon = \"qdrant.png\"\n\n\nclass Scylla(_Database):\n    _icon = \"scylla.png\"\n\n\n# Aliases\n\nClickHouse = Clickhouse\nCockroachDB = Cockroachdb\nCouchDB = Couchdb\nHBase = Hbase\nInfluxDB = Influxdb\nJanusGraph = Janusgraph\nMariaDB = Mariadb\nMongoDB = Mongodb\nMSSQL = Mssql\nMySQL = Mysql\nPostgreSQL = Postgresql\nQdrant = Qdrant\n"
  },
  {
    "path": "diagrams/onprem/dns.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Dns(_OnPrem):\n    _type = \"dns\"\n    _icon_dir = \"resources/onprem/dns\"\n\n\nclass Coredns(_Dns):\n    _icon = \"coredns.png\"\n\n\nclass Powerdns(_Dns):\n    _icon = \"powerdns.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/etl.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Etl(_OnPrem):\n    _type = \"etl\"\n    _icon_dir = \"resources/onprem/etl\"\n\n\nclass Embulk(_Etl):\n    _icon = \"embulk.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/gitops.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Gitops(_OnPrem):\n    _type = \"gitops\"\n    _icon_dir = \"resources/onprem/gitops\"\n\n\nclass Argocd(_Gitops):\n    _icon = \"argocd.png\"\n\n\nclass Flagger(_Gitops):\n    _icon = \"flagger.png\"\n\n\nclass Flux(_Gitops):\n    _icon = \"flux.png\"\n\n\n# Aliases\n\nArgoCD = Argocd\n"
  },
  {
    "path": "diagrams/onprem/groupware.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Groupware(_OnPrem):\n    _type = \"groupware\"\n    _icon_dir = \"resources/onprem/groupware\"\n\n\nclass Nextcloud(_Groupware):\n    _icon = \"nextcloud.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/iac.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Iac(_OnPrem):\n    _type = \"iac\"\n    _icon_dir = \"resources/onprem/iac\"\n\n\nclass Ansible(_Iac):\n    _icon = \"ansible.png\"\n\n\nclass Atlantis(_Iac):\n    _icon = \"atlantis.png\"\n\n\nclass Awx(_Iac):\n    _icon = \"awx.png\"\n\n\nclass Pulumi(_Iac):\n    _icon = \"pulumi.png\"\n\n\nclass Puppet(_Iac):\n    _icon = \"puppet.png\"\n\n\nclass Terraform(_Iac):\n    _icon = \"terraform.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/identity.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Identity(_OnPrem):\n    _type = \"identity\"\n    _icon_dir = \"resources/onprem/identity\"\n\n\nclass Dex(_Identity):\n    _icon = \"dex.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/inmemory.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Inmemory(_OnPrem):\n    _type = \"inmemory\"\n    _icon_dir = \"resources/onprem/inmemory\"\n\n\nclass Aerospike(_Inmemory):\n    _icon = \"aerospike.png\"\n\n\nclass Hazelcast(_Inmemory):\n    _icon = \"hazelcast.png\"\n\n\nclass Memcached(_Inmemory):\n    _icon = \"memcached.png\"\n\n\nclass Redis(_Inmemory):\n    _icon = \"redis.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/logging.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Logging(_OnPrem):\n    _type = \"logging\"\n    _icon_dir = \"resources/onprem/logging\"\n\n\nclass Fluentbit(_Logging):\n    _icon = \"fluentbit.png\"\n\n\nclass Graylog(_Logging):\n    _icon = \"graylog.png\"\n\n\nclass Loki(_Logging):\n    _icon = \"loki.png\"\n\n\nclass Rsyslog(_Logging):\n    _icon = \"rsyslog.png\"\n\n\nclass SyslogNg(_Logging):\n    _icon = \"syslog-ng.png\"\n\n\n# Aliases\n\nFluentBit = Fluentbit\nRSyslog = Rsyslog\n"
  },
  {
    "path": "diagrams/onprem/messaging.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Messaging(_OnPrem):\n    _type = \"messaging\"\n    _icon_dir = \"resources/onprem/messaging\"\n\n\nclass Centrifugo(_Messaging):\n    _icon = \"centrifugo.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/mlops.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Mlops(_OnPrem):\n    _type = \"mlops\"\n    _icon_dir = \"resources/onprem/mlops\"\n\n\nclass Mlflow(_Mlops):\n    _icon = \"mlflow.png\"\n\n\nclass Polyaxon(_Mlops):\n    _icon = \"polyaxon.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/monitoring.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Monitoring(_OnPrem):\n    _type = \"monitoring\"\n    _icon_dir = \"resources/onprem/monitoring\"\n\n\nclass Cortex(_Monitoring):\n    _icon = \"cortex.png\"\n\n\nclass Datadog(_Monitoring):\n    _icon = \"datadog.png\"\n\n\nclass Dynatrace(_Monitoring):\n    _icon = \"dynatrace.png\"\n\n\nclass Grafana(_Monitoring):\n    _icon = \"grafana.png\"\n\n\nclass Humio(_Monitoring):\n    _icon = \"humio.png\"\n\n\nclass Mimir(_Monitoring):\n    _icon = \"mimir.png\"\n\n\nclass Nagios(_Monitoring):\n    _icon = \"nagios.png\"\n\n\nclass Newrelic(_Monitoring):\n    _icon = \"newrelic.png\"\n\n\nclass PrometheusOperator(_Monitoring):\n    _icon = \"prometheus-operator.png\"\n\n\nclass Prometheus(_Monitoring):\n    _icon = \"prometheus.png\"\n\n\nclass Sentry(_Monitoring):\n    _icon = \"sentry.png\"\n\n\nclass Splunk(_Monitoring):\n    _icon = \"splunk.png\"\n\n\nclass Thanos(_Monitoring):\n    _icon = \"thanos.png\"\n\n\nclass Zabbix(_Monitoring):\n    _icon = \"zabbix.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Network(_OnPrem):\n    _type = \"network\"\n    _icon_dir = \"resources/onprem/network\"\n\n\nclass Ambassador(_Network):\n    _icon = \"ambassador.png\"\n\n\nclass Apache(_Network):\n    _icon = \"apache.png\"\n\n\nclass Bind9(_Network):\n    _icon = \"bind-9.png\"\n\n\nclass Caddy(_Network):\n    _icon = \"caddy.png\"\n\n\nclass CiscoRouter(_Network):\n    _icon = \"cisco-router.png\"\n\n\nclass CiscoSwitchL2(_Network):\n    _icon = \"cisco-switch-l2.png\"\n\n\nclass CiscoSwitchL3(_Network):\n    _icon = \"cisco-switch-l3.png\"\n\n\nclass Consul(_Network):\n    _icon = \"consul.png\"\n\n\nclass Envoy(_Network):\n    _icon = \"envoy.png\"\n\n\nclass Etcd(_Network):\n    _icon = \"etcd.png\"\n\n\nclass Glassfish(_Network):\n    _icon = \"glassfish.png\"\n\n\nclass Gunicorn(_Network):\n    _icon = \"gunicorn.png\"\n\n\nclass Haproxy(_Network):\n    _icon = \"haproxy.png\"\n\n\nclass Internet(_Network):\n    _icon = \"internet.png\"\n\n\nclass Istio(_Network):\n    _icon = \"istio.png\"\n\n\nclass Jbossas(_Network):\n    _icon = \"jbossas.png\"\n\n\nclass Jetty(_Network):\n    _icon = \"jetty.png\"\n\n\nclass Kong(_Network):\n    _icon = \"kong.png\"\n\n\nclass Linkerd(_Network):\n    _icon = \"linkerd.png\"\n\n\nclass Mikrotik(_Network):\n    _icon = \"mikrotik.png\"\n\n\nclass Nginx(_Network):\n    _icon = \"nginx.png\"\n\n\nclass Ocelot(_Network):\n    _icon = \"ocelot.png\"\n\n\nclass OpenServiceMesh(_Network):\n    _icon = \"open-service-mesh.png\"\n\n\nclass Opnsense(_Network):\n    _icon = \"opnsense.png\"\n\n\nclass Pfsense(_Network):\n    _icon = \"pfsense.png\"\n\n\nclass Pomerium(_Network):\n    _icon = \"pomerium.png\"\n\n\nclass Powerdns(_Network):\n    _icon = \"powerdns.png\"\n\n\nclass Tomcat(_Network):\n    _icon = \"tomcat.png\"\n\n\nclass Traefik(_Network):\n    _icon = \"traefik.png\"\n\n\nclass Tyk(_Network):\n    _icon = \"tyk.png\"\n\n\nclass Vyos(_Network):\n    _icon = \"vyos.png\"\n\n\nclass Wildfly(_Network):\n    _icon = \"wildfly.png\"\n\n\nclass Yarp(_Network):\n    _icon = \"yarp.png\"\n\n\nclass Zookeeper(_Network):\n    _icon = \"zookeeper.png\"\n\n\n# Aliases\n\nETCD = Etcd\nHAProxy = Haproxy\nOSM = OpenServiceMesh\nOPNSense = Opnsense\nPFSense = Pfsense\nVyOS = Vyos\n"
  },
  {
    "path": "diagrams/onprem/proxmox.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Proxmox(_OnPrem):\n    _type = \"proxmox\"\n    _icon_dir = \"resources/onprem/proxmox\"\n\n\nclass Pve(_Proxmox):\n    _icon = \"pve.png\"\n\n\n# Aliases\n\nProxmoxVE = Pve\n"
  },
  {
    "path": "diagrams/onprem/queue.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Queue(_OnPrem):\n    _type = \"queue\"\n    _icon_dir = \"resources/onprem/queue\"\n\n\nclass Activemq(_Queue):\n    _icon = \"activemq.png\"\n\n\nclass Celery(_Queue):\n    _icon = \"celery.png\"\n\n\nclass Emqx(_Queue):\n    _icon = \"emqx.png\"\n\n\nclass Kafka(_Queue):\n    _icon = \"kafka.png\"\n\n\nclass Nats(_Queue):\n    _icon = \"nats.png\"\n\n\nclass Rabbitmq(_Queue):\n    _icon = \"rabbitmq.png\"\n\n\nclass Zeromq(_Queue):\n    _icon = \"zeromq.png\"\n\n\n# Aliases\n\nActiveMQ = Activemq\nEMQX = Emqx\nRabbitMQ = Rabbitmq\nZeroMQ = Zeromq\n"
  },
  {
    "path": "diagrams/onprem/registry.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Registry(_OnPrem):\n    _type = \"registry\"\n    _icon_dir = \"resources/onprem/registry\"\n\n\nclass Harbor(_Registry):\n    _icon = \"harbor.png\"\n\n\nclass Jfrog(_Registry):\n    _icon = \"jfrog.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/search.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Search(_OnPrem):\n    _type = \"search\"\n    _icon_dir = \"resources/onprem/search\"\n\n\nclass Solr(_Search):\n    _icon = \"solr.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Security(_OnPrem):\n    _type = \"security\"\n    _icon_dir = \"resources/onprem/security\"\n\n\nclass Bitwarden(_Security):\n    _icon = \"bitwarden.png\"\n\n\nclass Trivy(_Security):\n    _icon = \"trivy.png\"\n\n\nclass Vault(_Security):\n    _icon = \"vault.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Storage(_OnPrem):\n    _type = \"storage\"\n    _icon_dir = \"resources/onprem/storage\"\n\n\nclass CephOsd(_Storage):\n    _icon = \"ceph-osd.png\"\n\n\nclass Ceph(_Storage):\n    _icon = \"ceph.png\"\n\n\nclass Glusterfs(_Storage):\n    _icon = \"glusterfs.png\"\n\n\nclass Portworx(_Storage):\n    _icon = \"portworx.png\"\n\n\n# Aliases\n\nCEPH = Ceph\nCEPH_OSD = CephOsd\n"
  },
  {
    "path": "diagrams/onprem/tracing.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Tracing(_OnPrem):\n    _type = \"tracing\"\n    _icon_dir = \"resources/onprem/tracing\"\n\n\nclass Jaeger(_Tracing):\n    _icon = \"jaeger.png\"\n\n\nclass Tempo(_Tracing):\n    _icon = \"tempo.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/vcs.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Vcs(_OnPrem):\n    _type = \"vcs\"\n    _icon_dir = \"resources/onprem/vcs\"\n\n\nclass Git(_Vcs):\n    _icon = \"git.png\"\n\n\nclass Gitea(_Vcs):\n    _icon = \"gitea.png\"\n\n\nclass Github(_Vcs):\n    _icon = \"github.png\"\n\n\nclass Gitlab(_Vcs):\n    _icon = \"gitlab.png\"\n\n\nclass Svn(_Vcs):\n    _icon = \"svn.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/onprem/workflow.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OnPrem\n\n\nclass _Workflow(_OnPrem):\n    _type = \"workflow\"\n    _icon_dir = \"resources/onprem/workflow\"\n\n\nclass Airflow(_Workflow):\n    _icon = \"airflow.png\"\n\n\nclass Digdag(_Workflow):\n    _icon = \"digdag.png\"\n\n\nclass Kubeflow(_Workflow):\n    _icon = \"kubeflow.png\"\n\n\nclass Nifi(_Workflow):\n    _icon = \"nifi.png\"\n\n\n# Aliases\n\nKubeFlow = Kubeflow\nNiFi = Nifi\n"
  },
  {
    "path": "diagrams/openstack/__init__.py",
    "content": "\"\"\"\nOpenstack provides a set of general OpenStack services.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _OpenStack(Node):\n    _provider = \"openstack\"\n    _icon_dir = \"resources/openstack\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass OpenStack(_OpenStack):\n    _icon = \"openstack.png\"\n"
  },
  {
    "path": "diagrams/openstack/adjacentenablers.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Adjacentenablers(_OpenStack):\n    _type = \"adjacentenablers\"\n    _icon_dir = \"resources/openstack/adjacentenablers\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/apiproxies.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Apiproxies(_OpenStack):\n    _type = \"apiproxies\"\n    _icon_dir = \"resources/openstack/apiproxies\"\n\n\nclass EC2API(_Apiproxies):\n    _icon = \"ec2api.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/applicationlifecycle.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Applicationlifecycle(_OpenStack):\n    _type = \"applicationlifecycle\"\n    _icon_dir = \"resources/openstack/applicationlifecycle\"\n\n\nclass Freezer(_Applicationlifecycle):\n    _icon = \"freezer.png\"\n\n\nclass Masakari(_Applicationlifecycle):\n    _icon = \"masakari.png\"\n\n\nclass Murano(_Applicationlifecycle):\n    _icon = \"murano.png\"\n\n\nclass Solum(_Applicationlifecycle):\n    _icon = \"solum.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/baremetal.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Baremetal(_OpenStack):\n    _type = \"baremetal\"\n    _icon_dir = \"resources/openstack/baremetal\"\n\n\nclass Cyborg(_Baremetal):\n    _icon = \"cyborg.png\"\n\n\nclass Ironic(_Baremetal):\n    _icon = \"ironic.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/billing.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Billing(_OpenStack):\n    _type = \"billing\"\n    _icon_dir = \"resources/openstack/billing\"\n\n\nclass Cloudkitty(_Billing):\n    _icon = \"cloudkitty.png\"\n\n\n# Aliases\n\nCloudKitty = Cloudkitty\n"
  },
  {
    "path": "diagrams/openstack/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Compute(_OpenStack):\n    _type = \"compute\"\n    _icon_dir = \"resources/openstack/compute\"\n\n\nclass Nova(_Compute):\n    _icon = \"nova.png\"\n\n\nclass Qinling(_Compute):\n    _icon = \"qinling.png\"\n\n\nclass Zun(_Compute):\n    _icon = \"zun.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/containerservices.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Containerservices(_OpenStack):\n    _type = \"containerservices\"\n    _icon_dir = \"resources/openstack/containerservices\"\n\n\nclass Kuryr(_Containerservices):\n    _icon = \"kuryr.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/deployment.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Deployment(_OpenStack):\n    _type = \"deployment\"\n    _icon_dir = \"resources/openstack/deployment\"\n\n\nclass Ansible(_Deployment):\n    _icon = \"ansible.png\"\n\n\nclass Charms(_Deployment):\n    _icon = \"charms.png\"\n\n\nclass Chef(_Deployment):\n    _icon = \"chef.png\"\n\n\nclass Helm(_Deployment):\n    _icon = \"helm.png\"\n\n\nclass Kolla(_Deployment):\n    _icon = \"kolla.png\"\n\n\nclass Tripleo(_Deployment):\n    _icon = \"tripleo.png\"\n\n\n# Aliases\n\nKollaAnsible = Kolla\nTripleO = Tripleo\n"
  },
  {
    "path": "diagrams/openstack/frontend.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Frontend(_OpenStack):\n    _type = \"frontend\"\n    _icon_dir = \"resources/openstack/frontend\"\n\n\nclass Horizon(_Frontend):\n    _icon = \"horizon.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/lifecyclemanagement.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Lifecyclemanagement(_OpenStack):\n    _type = \"lifecyclemanagement\"\n    _icon_dir = \"resources/openstack/lifecyclemanagement\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/monitoring.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Monitoring(_OpenStack):\n    _type = \"monitoring\"\n    _icon_dir = \"resources/openstack/monitoring\"\n\n\nclass Monasca(_Monitoring):\n    _icon = \"monasca.png\"\n\n\nclass Telemetry(_Monitoring):\n    _icon = \"telemetry.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/multiregion.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Multiregion(_OpenStack):\n    _type = \"multiregion\"\n    _icon_dir = \"resources/openstack/multiregion\"\n\n\nclass Tricircle(_Multiregion):\n    _icon = \"tricircle.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/networking.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Networking(_OpenStack):\n    _type = \"networking\"\n    _icon_dir = \"resources/openstack/networking\"\n\n\nclass Designate(_Networking):\n    _icon = \"designate.png\"\n\n\nclass Neutron(_Networking):\n    _icon = \"neutron.png\"\n\n\nclass Octavia(_Networking):\n    _icon = \"octavia.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/nfv.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _NFV(_OpenStack):\n    _type = \"nfv\"\n    _icon_dir = \"resources/openstack/nfv\"\n\n\nclass Tacker(_NFV):\n    _icon = \"tacker.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/operations.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Operations(_OpenStack):\n    _type = \"operations\"\n    _icon_dir = \"resources/openstack/operations\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/optimization.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Optimization(_OpenStack):\n    _type = \"optimization\"\n    _icon_dir = \"resources/openstack/optimization\"\n\n\nclass Congress(_Optimization):\n    _icon = \"congress.png\"\n\n\nclass Rally(_Optimization):\n    _icon = \"rally.png\"\n\n\nclass Vitrage(_Optimization):\n    _icon = \"vitrage.png\"\n\n\nclass Watcher(_Optimization):\n    _icon = \"watcher.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/orchestration.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Orchestration(_OpenStack):\n    _type = \"orchestration\"\n    _icon_dir = \"resources/openstack/orchestration\"\n\n\nclass Blazar(_Orchestration):\n    _icon = \"blazar.png\"\n\n\nclass Heat(_Orchestration):\n    _icon = \"heat.png\"\n\n\nclass Mistral(_Orchestration):\n    _icon = \"mistral.png\"\n\n\nclass Senlin(_Orchestration):\n    _icon = \"senlin.png\"\n\n\nclass Zaqar(_Orchestration):\n    _icon = \"zaqar.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/packaging.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Packaging(_OpenStack):\n    _type = \"packaging\"\n    _icon_dir = \"resources/openstack/packaging\"\n\n\nclass LOCI(_Packaging):\n    _icon = \"loci.png\"\n\n\nclass Puppet(_Packaging):\n    _icon = \"puppet.png\"\n\n\nclass RPM(_Packaging):\n    _icon = \"rpm.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/sharedservices.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Sharedservices(_OpenStack):\n    _type = \"sharedservices\"\n    _icon_dir = \"resources/openstack/sharedservices\"\n\n\nclass Barbican(_Sharedservices):\n    _icon = \"barbican.png\"\n\n\nclass Glance(_Sharedservices):\n    _icon = \"glance.png\"\n\n\nclass Karbor(_Sharedservices):\n    _icon = \"karbor.png\"\n\n\nclass Keystone(_Sharedservices):\n    _icon = \"keystone.png\"\n\n\nclass Searchlight(_Sharedservices):\n    _icon = \"searchlight.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Storage(_OpenStack):\n    _type = \"storage\"\n    _icon_dir = \"resources/openstack/storage\"\n\n\nclass Cinder(_Storage):\n    _icon = \"cinder.png\"\n\n\nclass Manila(_Storage):\n    _icon = \"manila.png\"\n\n\nclass Swift(_Storage):\n    _icon = \"swift.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/openstack/user.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _User(_OpenStack):\n    _type = \"user\"\n    _icon_dir = \"resources/openstack/user\"\n\n\nclass Openstackclient(_User):\n    _icon = \"openstackclient.png\"\n\n\n# Aliases\n\nOpenStackClient = Openstackclient\n"
  },
  {
    "path": "diagrams/openstack/workloadprovisioning.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _OpenStack\n\n\nclass _Workloadprovisioning(_OpenStack):\n    _type = \"workloadprovisioning\"\n    _icon_dir = \"resources/openstack/workloadprovisioning\"\n\n\nclass Magnum(_Workloadprovisioning):\n    _icon = \"magnum.png\"\n\n\nclass Sahara(_Workloadprovisioning):\n    _icon = \"sahara.png\"\n\n\nclass Trove(_Workloadprovisioning):\n    _icon = \"trove.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/outscale/__init__.py",
    "content": "from diagrams import Node\n\n\nclass _Outscale(Node):\n    _provider = \"outscale\"\n    _icon_dir = \"resources/outscale\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Outscale(_Outscale):\n    _icon = \"outscale.png\"\n"
  },
  {
    "path": "diagrams/outscale/compute.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Outscale\n\n\nclass _Compute(_Outscale):\n    _type = \"compute\"\n    _icon_dir = \"resources/outscale/compute\"\n\n\nclass Compute(_Compute):\n    _icon = \"compute.png\"\n\n\nclass DirectConnect(_Compute):\n    _icon = \"direct-connect.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/outscale/network.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Outscale\n\n\nclass _Network(_Outscale):\n    _type = \"network\"\n    _icon_dir = \"resources/outscale/network\"\n\n\nclass ClientVpn(_Network):\n    _icon = \"client-vpn.png\"\n\n\nclass InternetService(_Network):\n    _icon = \"internet-service.png\"\n\n\nclass LoadBalancer(_Network):\n    _icon = \"load-balancer.png\"\n\n\nclass NatService(_Network):\n    _icon = \"nat-service.png\"\n\n\nclass Net(_Network):\n    _icon = \"net.png\"\n\n\nclass SiteToSiteVpng(_Network):\n    _icon = \"site-to-site-vpng.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/outscale/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Outscale\n\n\nclass _Security(_Outscale):\n    _type = \"security\"\n    _icon_dir = \"resources/outscale/security\"\n\n\nclass Firewall(_Security):\n    _icon = \"firewall.png\"\n\n\nclass IdentityAndAccessManagement(_Security):\n    _icon = \"identity-and-access-management.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/outscale/storage.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Outscale\n\n\nclass _Storage(_Outscale):\n    _type = \"storage\"\n    _icon_dir = \"resources/outscale/storage\"\n\n\nclass SimpleStorageService(_Storage):\n    _icon = \"simple-storage-service.png\"\n\n\nclass Storage(_Storage):\n    _icon = \"storage.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/programming/__init__.py",
    "content": "\"\"\"\nProgramming provides a set of programming languages and frameworks.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Programming(Node):\n    _provider = \"programming\"\n    _icon_dir = \"resources/programming\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Programming(_Programming):\n    _icon = \"programming.png\"\n"
  },
  {
    "path": "diagrams/programming/flowchart.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Programming\n\n\nclass _Flowchart(_Programming):\n    _type = \"flowchart\"\n    _icon_dir = \"resources/programming/flowchart\"\n\n\nclass Action(_Flowchart):\n    _icon = \"action.png\"\n\n\nclass Collate(_Flowchart):\n    _icon = \"collate.png\"\n\n\nclass Database(_Flowchart):\n    _icon = \"database.png\"\n\n\nclass Decision(_Flowchart):\n    _icon = \"decision.png\"\n\n\nclass Delay(_Flowchart):\n    _icon = \"delay.png\"\n\n\nclass Display(_Flowchart):\n    _icon = \"display.png\"\n\n\nclass Document(_Flowchart):\n    _icon = \"document.png\"\n\n\nclass InputOutput(_Flowchart):\n    _icon = \"input-output.png\"\n\n\nclass Inspection(_Flowchart):\n    _icon = \"inspection.png\"\n\n\nclass InternalStorage(_Flowchart):\n    _icon = \"internal-storage.png\"\n\n\nclass LoopLimit(_Flowchart):\n    _icon = \"loop-limit.png\"\n\n\nclass ManualInput(_Flowchart):\n    _icon = \"manual-input.png\"\n\n\nclass ManualLoop(_Flowchart):\n    _icon = \"manual-loop.png\"\n\n\nclass Merge(_Flowchart):\n    _icon = \"merge.png\"\n\n\nclass MultipleDocuments(_Flowchart):\n    _icon = \"multiple-documents.png\"\n\n\nclass OffPageConnectorLeft(_Flowchart):\n    _icon = \"off-page-connector-left.png\"\n\n\nclass OffPageConnectorRight(_Flowchart):\n    _icon = \"off-page-connector-right.png\"\n\n\nclass Or(_Flowchart):\n    _icon = \"or.png\"\n\n\nclass PredefinedProcess(_Flowchart):\n    _icon = \"predefined-process.png\"\n\n\nclass Preparation(_Flowchart):\n    _icon = \"preparation.png\"\n\n\nclass Sort(_Flowchart):\n    _icon = \"sort.png\"\n\n\nclass StartEnd(_Flowchart):\n    _icon = \"start-end.png\"\n\n\nclass StoredData(_Flowchart):\n    _icon = \"stored-data.png\"\n\n\nclass SummingJunction(_Flowchart):\n    _icon = \"summing-junction.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/programming/framework.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Programming\n\n\nclass _Framework(_Programming):\n    _type = \"framework\"\n    _icon_dir = \"resources/programming/framework\"\n\n\nclass Angular(_Framework):\n    _icon = \"angular.png\"\n\n\nclass Backbone(_Framework):\n    _icon = \"backbone.png\"\n\n\nclass Camel(_Framework):\n    _icon = \"camel.png\"\n\n\nclass Django(_Framework):\n    _icon = \"django.png\"\n\n\nclass Dotnet(_Framework):\n    _icon = \"dotnet.png\"\n\n\nclass Ember(_Framework):\n    _icon = \"ember.png\"\n\n\nclass Fastapi(_Framework):\n    _icon = \"fastapi.png\"\n\n\nclass Flask(_Framework):\n    _icon = \"flask.png\"\n\n\nclass Flutter(_Framework):\n    _icon = \"flutter.png\"\n\n\nclass Graphql(_Framework):\n    _icon = \"graphql.png\"\n\n\nclass Hibernate(_Framework):\n    _icon = \"hibernate.png\"\n\n\nclass Jhipster(_Framework):\n    _icon = \"jhipster.png\"\n\n\nclass Laravel(_Framework):\n    _icon = \"laravel.png\"\n\n\nclass Micronaut(_Framework):\n    _icon = \"micronaut.png\"\n\n\nclass Nextjs(_Framework):\n    _icon = \"nextjs.png\"\n\n\nclass Phoenix(_Framework):\n    _icon = \"phoenix.png\"\n\n\nclass Quarkus(_Framework):\n    _icon = \"quarkus.png\"\n\n\nclass Rails(_Framework):\n    _icon = \"rails.png\"\n\n\nclass React(_Framework):\n    _icon = \"react.png\"\n\n\nclass Spring(_Framework):\n    _icon = \"spring.png\"\n\n\nclass Sqlpage(_Framework):\n    _icon = \"sqlpage.png\"\n\n\nclass Starlette(_Framework):\n    _icon = \"starlette.png\"\n\n\nclass Svelte(_Framework):\n    _icon = \"svelte.png\"\n\n\nclass Vercel(_Framework):\n    _icon = \"vercel.png\"\n\n\nclass Vue(_Framework):\n    _icon = \"vue.png\"\n\n\n# Aliases\n\nFastAPI = Fastapi\nGraphQL = Graphql\nDotNet = Dotnet\nNextJs = Nextjs\n"
  },
  {
    "path": "diagrams/programming/language.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Programming\n\n\nclass _Language(_Programming):\n    _type = \"language\"\n    _icon_dir = \"resources/programming/language\"\n\n\nclass Bash(_Language):\n    _icon = \"bash.png\"\n\n\nclass C(_Language):\n    _icon = \"c.png\"\n\n\nclass Cpp(_Language):\n    _icon = \"cpp.png\"\n\n\nclass Csharp(_Language):\n    _icon = \"csharp.png\"\n\n\nclass Dart(_Language):\n    _icon = \"dart.png\"\n\n\nclass Elixir(_Language):\n    _icon = \"elixir.png\"\n\n\nclass Erlang(_Language):\n    _icon = \"erlang.png\"\n\n\nclass Go(_Language):\n    _icon = \"go.png\"\n\n\nclass Java(_Language):\n    _icon = \"java.png\"\n\n\nclass Javascript(_Language):\n    _icon = \"javascript.png\"\n\n\nclass Kotlin(_Language):\n    _icon = \"kotlin.png\"\n\n\nclass Latex(_Language):\n    _icon = \"latex.png\"\n\n\nclass Matlab(_Language):\n    _icon = \"matlab.png\"\n\n\nclass Nodejs(_Language):\n    _icon = \"nodejs.png\"\n\n\nclass Php(_Language):\n    _icon = \"php.png\"\n\n\nclass Python(_Language):\n    _icon = \"python.png\"\n\n\nclass R(_Language):\n    _icon = \"r.png\"\n\n\nclass Ruby(_Language):\n    _icon = \"ruby.png\"\n\n\nclass Rust(_Language):\n    _icon = \"rust.png\"\n\n\nclass Scala(_Language):\n    _icon = \"scala.png\"\n\n\nclass Sql(_Language):\n    _icon = \"sql.png\"\n\n\nclass Swift(_Language):\n    _icon = \"swift.png\"\n\n\nclass Typescript(_Language):\n    _icon = \"typescript.png\"\n\n\n# Aliases\n\nJavaScript = Javascript\nNodeJS = Nodejs\nPHP = Php\nTypeScript = Typescript\n"
  },
  {
    "path": "diagrams/programming/runtime.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Programming\n\n\nclass _Runtime(_Programming):\n    _type = \"runtime\"\n    _icon_dir = \"resources/programming/runtime\"\n\n\nclass Dapr(_Runtime):\n    _icon = \"dapr.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/__init__.py",
    "content": "\"\"\"\nSaas provides a set of general saas services.\n\"\"\"\n\nfrom diagrams import Node\n\n\nclass _Saas(Node):\n    _provider = \"saas\"\n    _icon_dir = \"resources/saas\"\n\n    fontcolor = \"#ffffff\"\n\n\nclass Saas(_Saas):\n    _icon = \"saas.png\"\n"
  },
  {
    "path": "diagrams/saas/alerting.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Alerting(_Saas):\n    _type = \"alerting\"\n    _icon_dir = \"resources/saas/alerting\"\n\n\nclass Newrelic(_Alerting):\n    _icon = \"newrelic.png\"\n\n\nclass Opsgenie(_Alerting):\n    _icon = \"opsgenie.png\"\n\n\nclass Pagerduty(_Alerting):\n    _icon = \"pagerduty.png\"\n\n\nclass Pushover(_Alerting):\n    _icon = \"pushover.png\"\n\n\nclass Xmatters(_Alerting):\n    _icon = \"xmatters.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/analytics.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Analytics(_Saas):\n    _type = \"analytics\"\n    _icon_dir = \"resources/saas/analytics\"\n\n\nclass Dataform(_Analytics):\n    _icon = \"dataform.png\"\n\n\nclass Snowflake(_Analytics):\n    _icon = \"snowflake.png\"\n\n\nclass Stitch(_Analytics):\n    _icon = \"stitch.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/automation.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Automation(_Saas):\n    _type = \"automation\"\n    _icon_dir = \"resources/saas/automation\"\n\n\nclass N8N(_Automation):\n    _icon = \"n8n.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/cdn.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Cdn(_Saas):\n    _type = \"cdn\"\n    _icon_dir = \"resources/saas/cdn\"\n\n\nclass Akamai(_Cdn):\n    _icon = \"akamai.png\"\n\n\nclass Cloudflare(_Cdn):\n    _icon = \"cloudflare.png\"\n\n\nclass Fastly(_Cdn):\n    _icon = \"fastly.png\"\n\n\nclass Imperva(_Cdn):\n    _icon = \"imperva.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/chat.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Chat(_Saas):\n    _type = \"chat\"\n    _icon_dir = \"resources/saas/chat\"\n\n\nclass Discord(_Chat):\n    _icon = \"discord.png\"\n\n\nclass Line(_Chat):\n    _icon = \"line.png\"\n\n\nclass Mattermost(_Chat):\n    _icon = \"mattermost.png\"\n\n\nclass Messenger(_Chat):\n    _icon = \"messenger.png\"\n\n\nclass RocketChat(_Chat):\n    _icon = \"rocket-chat.png\"\n\n\nclass Slack(_Chat):\n    _icon = \"slack.png\"\n\n\nclass Teams(_Chat):\n    _icon = \"teams.png\"\n\n\nclass Telegram(_Chat):\n    _icon = \"telegram.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/communication.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Communication(_Saas):\n    _type = \"communication\"\n    _icon_dir = \"resources/saas/communication\"\n\n\nclass Twilio(_Communication):\n    _icon = \"twilio.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/crm.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Crm(_Saas):\n    _type = \"crm\"\n    _icon_dir = \"resources/saas/crm\"\n\n\nclass Intercom(_Crm):\n    _icon = \"intercom.png\"\n\n\nclass Zendesk(_Crm):\n    _icon = \"zendesk.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/filesharing.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Filesharing(_Saas):\n    _type = \"filesharing\"\n    _icon_dir = \"resources/saas/filesharing\"\n\n\nclass Nextcloud(_Filesharing):\n    _icon = \"nextcloud.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/identity.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Identity(_Saas):\n    _type = \"identity\"\n    _icon_dir = \"resources/saas/identity\"\n\n\nclass Auth0(_Identity):\n    _icon = \"auth0.png\"\n\n\nclass Okta(_Identity):\n    _icon = \"okta.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/logging.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Logging(_Saas):\n    _type = \"logging\"\n    _icon_dir = \"resources/saas/logging\"\n\n\nclass Datadog(_Logging):\n    _icon = \"datadog.png\"\n\n\nclass Newrelic(_Logging):\n    _icon = \"newrelic.png\"\n\n\nclass Papertrail(_Logging):\n    _icon = \"papertrail.png\"\n\n\n# Aliases\n\nDataDog = Datadog\nNewRelic = Newrelic\n"
  },
  {
    "path": "diagrams/saas/media.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Media(_Saas):\n    _type = \"media\"\n    _icon_dir = \"resources/saas/media\"\n\n\nclass Cloudinary(_Media):\n    _icon = \"cloudinary.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/payment.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Payment(_Saas):\n    _type = \"payment\"\n    _icon_dir = \"resources/saas/payment\"\n\n\nclass Adyen(_Payment):\n    _icon = \"adyen.png\"\n\n\nclass AmazonPay(_Payment):\n    _icon = \"amazon-pay.png\"\n\n\nclass Paypal(_Payment):\n    _icon = \"paypal.png\"\n\n\nclass Stripe(_Payment):\n    _icon = \"stripe.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/recommendation.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Recommendation(_Saas):\n    _type = \"recommendation\"\n    _icon_dir = \"resources/saas/recommendation\"\n\n\nclass Recombee(_Recommendation):\n    _icon = \"recombee.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/security.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Security(_Saas):\n    _type = \"security\"\n    _icon_dir = \"resources/saas/security\"\n\n\nclass Crowdstrike(_Security):\n    _icon = \"crowdstrike.png\"\n\n\nclass Sonarqube(_Security):\n    _icon = \"sonarqube.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "diagrams/saas/social.py",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _Saas\n\n\nclass _Social(_Saas):\n    _type = \"social\"\n    _icon_dir = \"resources/saas/social\"\n\n\nclass Facebook(_Social):\n    _icon = \"facebook.png\"\n\n\nclass Twitter(_Social):\n    _icon = \"twitter.png\"\n\n\n# Aliases\n"
  },
  {
    "path": "docker/dev/Dockerfile",
    "content": "# use latest python alpine image.\nFROM python:3.13.3-alpine3.20\n\n# install system dependencies.\nRUN apk update && apk add --no-cache \\\n  gcc libc-dev g++ graphviz git bash go imagemagick inkscape ttf-opensans curl fontconfig xdg-utils\n\n# install go package.\nRUN go install github.com/mingrammer/round@latest\n\n# install fonts\nRUN curl -O https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip \\\n&& mkdir -p /usr/share/fonts/NotoSansCJKjp \\\n&& unzip NotoSansCJKjp-hinted.zip -d /usr/share/fonts/NotoSansCJKjp/ \\\n&& rm NotoSansCJKjp-hinted.zip \\\n&& fc-cache -fv\n\n# add go bin to path.\nENV PATH=\"$PATH:/root/go/bin\"\n\n# project directory.\nWORKDIR /usr/src/diagrams\n\n# Copy the rest of your app's source code from your host to your image filesystem.\nCOPY . .\n\n# install python requirements.\nRUN pip install black graphviz jinja2\n"
  },
  {
    "path": "docs/getting-started/examples.md",
    "content": "---\nid: examples\ntitle: Examples\n---\n\nHere are some more examples.\n\n## Grouped Workers on AWS\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\n\nwith Diagram(\"Grouped Workers\", show=False, direction=\"TB\"):\n    ELB(\"lb\") >> [EC2(\"worker1\"),\n                  EC2(\"worker2\"),\n                  EC2(\"worker3\"),\n                  EC2(\"worker4\"),\n                  EC2(\"worker5\")] >> RDS(\"events\")\n```\n\n![grouped workers diagram](/img/grouped_workers_diagram.png)\n\n## Clustered Web Services\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.aws.compute import ECS\nfrom diagrams.aws.database import ElastiCache, RDS\nfrom diagrams.aws.network import ELB\nfrom diagrams.aws.network import Route53\n\nwith Diagram(\"Clustered Web Services\", show=False):\n    dns = Route53(\"dns\")\n    lb = ELB(\"lb\")\n\n    with Cluster(\"Services\"):\n        svc_group = [ECS(\"web1\"),\n                     ECS(\"web2\"),\n                     ECS(\"web3\")]\n\n    with Cluster(\"DB Cluster\"):\n        db_primary = RDS(\"userdb\")\n        db_primary - [RDS(\"userdb ro\")]\n\n    memcached = ElastiCache(\"memcached\")\n\n    dns >> lb >> svc_group\n    svc_group >> db_primary\n    svc_group >> memcached\n```\n\n![clustered web services diagram](/img/clustered_web_services_diagram.png)\n\n## Event Processing on AWS\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.aws.compute import ECS, EKS, Lambda\nfrom diagrams.aws.database import Redshift\nfrom diagrams.aws.integration import SQS\nfrom diagrams.aws.storage import S3\n\nwith Diagram(\"Event Processing\", show=False):\n    source = EKS(\"k8s source\")\n\n    with Cluster(\"Event Flows\"):\n        with Cluster(\"Event Workers\"):\n            workers = [ECS(\"worker1\"),\n                       ECS(\"worker2\"),\n                       ECS(\"worker3\")]\n\n        queue = SQS(\"event queue\")\n\n        with Cluster(\"Processing\"):\n            handlers = [Lambda(\"proc1\"),\n                        Lambda(\"proc2\"),\n                        Lambda(\"proc3\")]\n\n    store = S3(\"events store\")\n    dw = Redshift(\"analytics\")\n\n    source >> workers >> queue >> handlers\n    handlers >> store\n    handlers >> dw\n```\n\n![event processing diagram](/img/event_processing_diagram.png)\n\n## Message Collecting System on GCP\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.gcp.analytics import BigQuery, Dataflow, PubSub\nfrom diagrams.gcp.compute import AppEngine, Functions\nfrom diagrams.gcp.database import BigTable\nfrom diagrams.gcp.iot import IotCore\nfrom diagrams.gcp.storage import GCS\n\nwith Diagram(\"Message Collecting\", show=False):\n    pubsub = PubSub(\"pubsub\")\n\n    with Cluster(\"Source of Data\"):\n        [IotCore(\"core1\"),\n         IotCore(\"core2\"),\n         IotCore(\"core3\")] >> pubsub\n\n    with Cluster(\"Targets\"):\n        with Cluster(\"Data Flow\"):\n            flow = Dataflow(\"data flow\")\n\n        with Cluster(\"Data Lake\"):\n            flow >> [BigQuery(\"bq\"),\n                     GCS(\"storage\")]\n\n        with Cluster(\"Event Driven\"):\n            with Cluster(\"Processing\"):\n                flow >> AppEngine(\"engine\") >> BigTable(\"bigtable\")\n\n            with Cluster(\"Serverless\"):\n                flow >> Functions(\"func\") >> AppEngine(\"appengine\")\n\n    pubsub >> flow\n```\n\n![message collecting diagram](/img/message_collecting_diagram.png)\n\n## Exposed Pod with 3 Replicas on Kubernetes\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.k8s.clusterconfig import HPA\nfrom diagrams.k8s.compute import Deployment, Pod, ReplicaSet\nfrom diagrams.k8s.network import Ingress, Service\n\nwith Diagram(\"Exposed Pod with 3 Replicas\", show=False):\n    net = Ingress(\"domain.com\") >> Service(\"svc\")\n    net >> [Pod(\"pod1\"),\n            Pod(\"pod2\"),\n            Pod(\"pod3\")] << ReplicaSet(\"rs\") << Deployment(\"dp\") << HPA(\"hpa\")\n\n```\n\n![exposed pod with 3 replicas diagram](/img/exposed_pod_with_3_replicas_diagram.png)\n\n## Stateful Architecture on Kubernetes\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.k8s.compute import Pod, StatefulSet\nfrom diagrams.k8s.network import Service\nfrom diagrams.k8s.storage import PV, PVC, StorageClass\n\nwith Diagram(\"Stateful Architecture\", show=False):\n    with Cluster(\"Apps\"):\n        svc = Service(\"svc\")\n        sts = StatefulSet(\"sts\")\n\n        apps = []\n        for _ in range(3):\n            pod = Pod(\"pod\")\n            pvc = PVC(\"pvc\")\n            pod - sts - pvc\n            apps.append(svc >> pod >> pvc)\n\n    apps << PV(\"pv\") << StorageClass(\"sc\")\n```\n\n![stateful architecture diagram](/img/stateful_architecture_diagram.png)\n\n## Advanced Web Service with On-Premises\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.onprem.analytics import Spark\nfrom diagrams.onprem.compute import Server\nfrom diagrams.onprem.database import PostgreSQL\nfrom diagrams.onprem.inmemory import Redis\nfrom diagrams.onprem.aggregator import Fluentd\nfrom diagrams.onprem.monitoring import Grafana, Prometheus\nfrom diagrams.onprem.network import Nginx\nfrom diagrams.onprem.queue import Kafka\n\nwith Diagram(\"Advanced Web Service with On-Premises\", show=False):\n    ingress = Nginx(\"ingress\")\n\n    metrics = Prometheus(\"metric\")\n    metrics << Grafana(\"monitoring\")\n\n    with Cluster(\"Service Cluster\"):\n        grpcsvc = [\n            Server(\"grpc1\"),\n            Server(\"grpc2\"),\n            Server(\"grpc3\")]\n\n    with Cluster(\"Sessions HA\"):\n        primary = Redis(\"session\")\n        primary - Redis(\"replica\") << metrics\n        grpcsvc >> primary\n\n    with Cluster(\"Database HA\"):\n        primary = PostgreSQL(\"users\")\n        primary - PostgreSQL(\"replica\") << metrics\n        grpcsvc >> primary\n\n    aggregator = Fluentd(\"logging\")\n    aggregator >> Kafka(\"stream\") >> Spark(\"analytics\")\n\n    ingress >> grpcsvc >> aggregator\n```\n\n![advanced web service with on-premises diagram](/img/advanced_web_service_with_on-premises.png)\n\n## Advanced Web Service with On-Premises (with colors and labels)\n\n```python\nfrom diagrams import Cluster, Diagram, Edge\nfrom diagrams.onprem.analytics import Spark\nfrom diagrams.onprem.compute import Server\nfrom diagrams.onprem.database import PostgreSQL\nfrom diagrams.onprem.inmemory import Redis\nfrom diagrams.onprem.aggregator import Fluentd\nfrom diagrams.onprem.monitoring import Grafana, Prometheus\nfrom diagrams.onprem.network import Nginx\nfrom diagrams.onprem.queue import Kafka\n\nwith Diagram(name=\"Advanced Web Service with On-Premises (colored)\", show=False):\n    ingress = Nginx(\"ingress\")\n\n    metrics = Prometheus(\"metric\")\n    metrics << Edge(color=\"firebrick\", style=\"dashed\") << Grafana(\"monitoring\")\n\n    with Cluster(\"Service Cluster\"):\n        grpcsvc = [\n            Server(\"grpc1\"),\n            Server(\"grpc2\"),\n            Server(\"grpc3\")]\n\n    with Cluster(\"Sessions HA\"):\n        primary = Redis(\"session\")\n        primary - Edge(color=\"brown\", style=\"dashed\") - Redis(\"replica\") << Edge(label=\"collect\") << metrics\n        grpcsvc >> Edge(color=\"brown\") >> primary\n\n    with Cluster(\"Database HA\"):\n        primary = PostgreSQL(\"users\")\n        primary - Edge(color=\"brown\", style=\"dotted\") - PostgreSQL(\"replica\") << Edge(label=\"collect\") << metrics\n        grpcsvc >> Edge(color=\"black\") >> primary\n\n    aggregator = Fluentd(\"logging\")\n    aggregator >> Edge(label=\"parse\") >> Kafka(\"stream\") >> Edge(color=\"black\", style=\"bold\") >> Spark(\"analytics\")\n\n    ingress >> Edge(color=\"darkgreen\") << grpcsvc >> Edge(color=\"darkorange\") >> aggregator\n```\n\n![advanced web service with on-premises diagram colored](/img/advanced_web_service_with_on-premises_colored.png)\n\n## RabbitMQ Consumers with Custom Nodes\n\n```python\nfrom urllib.request import urlretrieve\n\nfrom diagrams import Cluster, Diagram\nfrom diagrams.aws.database import Aurora\nfrom diagrams.custom import Custom\nfrom diagrams.k8s.compute import Pod\n\n# Download an image to be used into a Custom Node class\nrabbitmq_url = \"https://jpadilla.github.io/rabbitmqapp/assets/img/icon.png\"\nrabbitmq_icon = \"rabbitmq.png\"\nurlretrieve(rabbitmq_url, rabbitmq_icon)\n\nwith Diagram(\"Broker Consumers\", show=False):\n    with Cluster(\"Consumers\"):\n        consumers = [\n            Pod(\"worker\"),\n            Pod(\"worker\"),\n            Pod(\"worker\")]\n\n    queue = Custom(\"Message queue\", rabbitmq_icon)\n\n    queue >> consumers >> Aurora(\"Database\")\n```\n\n![rabbitmq consumers diagram](/img/rabbitmq_consumers_diagram.png)\n"
  },
  {
    "path": "docs/getting-started/installation.md",
    "content": "---\nid: installation\ntitle: Installation\n---\n\n**diagrams** requires **Python 3.7** or higher, check your Python version first.\n\n**diagrams** uses [Graphviz](https://www.graphviz.org/) to render the diagram, so you need to [install Graphviz](https://graphviz.gitlab.io/download/) to use it.\n\n> macOS users using [Homebrew](https://brew.sh) can install Graphviz via `brew install graphviz` . Similarly, Windows users with [Chocolatey](https://chocolatey.org) installed can run `choco install graphviz` or use [Winget](https://learn.microsoft.com/windows/package-manager/) via `winget install Graphviz.Graphviz -i`.\n\nAfter installing Graphviz (or if you already have it), install **diagrams**:\n\n```shell\n# using pip (pip3)\n$ pip install diagrams\n\n# using pipenv\n$ pipenv install diagrams\n\n# using poetry\n$ poetry add diagrams\n\n# using uv\n$ uv tool install diagrams\n```\n\n## Quick Start\n\n```python\n# diagram.py\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\n\nwith Diagram(\"Web Service\", show=False):\n    ELB(\"lb\") >> EC2(\"web\") >> RDS(\"userdb\")\n```\n\nTo generate the diagram, run:\n\n```shell\n$ python diagram.py\n```\n\nThis generates the diagram below:\n\n![web service diagram](/img/web_service_diagram.png)\n\nIt will be saved as `web_service.png` in your working directory.\n\n### CLI\n\nWith the `diagrams` CLI you can process one or more diagram files at once.\n\n```shell\n$ diagrams diagram1.py diagram2.py\n```\n\n## Next\n\nSee more [Examples](/docs/getting-started/examples) or see the [Guides](/docs/guides/diagram) page for more details.\n"
  },
  {
    "path": "docs/guides/cluster.md",
    "content": "---\nid: cluster\ntitle: Clusters\n---\n\n`Cluster` allows you to group (or cluster) nodes in an isolated group.\n\n## Basic\n\n`Cluster` represents a local cluster context.\n\nYou can create a cluster context using the `Cluster` class. You can also connect the nodes in a cluster to other nodes outside a cluster.\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.aws.compute import ECS\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import Route53\n\nwith Diagram(\"Simple Web Service with DB Cluster\", show=False):\n    dns = Route53(\"dns\")\n    web = ECS(\"service\")\n\n    with Cluster(\"DB Cluster\"):\n        db_primary = RDS(\"primary\")\n        db_primary - [RDS(\"replica1\"),\n                     RDS(\"replica2\")]\n\n    dns >> web >> db_primary\n```\n\n![simple web service with db cluster diagram](/img/simple_web_service_with_db_cluster_diagram.png)\n\n## Nested Clusters\n\nNested clustering is also possible:\n\n```python\nfrom diagrams import Cluster, Diagram\nfrom diagrams.aws.compute import ECS, EKS, Lambda\nfrom diagrams.aws.database import Redshift\nfrom diagrams.aws.integration import SQS\nfrom diagrams.aws.storage import S3\n\nwith Diagram(\"Event Processing\", show=False):\n    source = EKS(\"k8s source\")\n\n    with Cluster(\"Event Flows\"):\n        with Cluster(\"Event Workers\"):\n            workers = [ECS(\"worker1\"),\n                       ECS(\"worker2\"),\n                       ECS(\"worker3\")]\n\n        queue = SQS(\"event queue\")\n\n        with Cluster(\"Processing\"):\n            handlers = [Lambda(\"proc1\"),\n                        Lambda(\"proc2\"),\n                        Lambda(\"proc3\")]\n\n    store = S3(\"events store\")\n    dw = Redshift(\"analytics\")\n\n    source >> workers >> queue >> handlers\n    handlers >> store\n    handlers >> dw\n```\n\n![event processing diagram](/img/event_processing_diagram.png)\n\n> There is no depth limit to nesting. Feel free to create nested clusters as deep as you want.\n"
  },
  {
    "path": "docs/guides/diagram.md",
    "content": "---\nid: diagram\ntitle: Diagrams\n---\n\n`Diagram` is a primary object representing a diagram.\n\n## Basic\n\n`Diagram` represents a global diagram context.\n\nYou can create a diagram context with the `Diagram` class. The first parameter of the `Diagram` constructor will be used to generate the output filename.\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\"):\n    EC2(\"web\")\n```\n\nIf you run the above script with the command below,\n\n```shell\n$ python diagram.py\n```\n\nit will generate an image file with single `EC2` node drawn as `simple_diagram.png` in your working directory and open that created image file immediately.\n\n## Jupyter Notebooks\n\nDiagrams can also be rendered directly inside Jupyter notebooks like this:\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\") as diag:\n    EC2(\"web\")\ndiag\n```\n\n## Options\n\nYou can specify the output file format with the `outformat` parameter. The default is **png**.\n\n> Allowed formats are: png, jpg, svg, pdf, and dot\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\", outformat=\"jpg\"):\n    EC2(\"web\")\n```\n\nThe `outformat` parameter also supports a list to output all the defined outputs in one call:\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram Multi Output\", outformat=[\"jpg\", \"png\", \"dot\"]):\n    EC2(\"web\")\n```\n\nYou can specify the output filename with the `filename` parameter. The extension shouldn't be included, it's determined by the `outformat` parameter.\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\", filename=\"my_diagram\"):\n    EC2(\"web\")\n```\n\nYou can also disable the automatic file opening by setting the `show` parameter to **false**. The default is **true**.\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\", show=False):\n    EC2(\"web\")\n```\n\nDiagrams also allow custom Graphviz dot attributes options.\n\n> `graph_attr`, `node_attr` and `edge_attr` are supported. Here is a [reference link](https://www.graphviz.org/doc/info/attrs.html).\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\ngraph_attr = {\n\t\"fontsize\": \"45\",\n\t\"bgcolor\": \"transparent\"\n}\n\nwith Diagram(\"Simple Diagram\", show=False, graph_attr=graph_attr):\n    EC2(\"web\")\n```\n"
  },
  {
    "path": "docs/guides/edge.md",
    "content": "---\nid: edge\ntitle: Edges\n---\n\n`Edge` represents an edge between nodes.\n\n## Basic\n\n`Edge` is an object representing a connection between nodes with some additional properties.\n\nAn edge object contains three attributes: **label**, **color**, and **style**. They mirror the corresponding Graphviz edge attributes.\n\n```python\nfrom diagrams import Cluster, Diagram, Edge\nfrom diagrams.onprem.analytics import Spark\nfrom diagrams.onprem.compute import Server\nfrom diagrams.onprem.database import PostgreSQL\nfrom diagrams.onprem.inmemory import Redis\nfrom diagrams.onprem.aggregator import Fluentd\nfrom diagrams.onprem.monitoring import Grafana, Prometheus\nfrom diagrams.onprem.network import Nginx\nfrom diagrams.onprem.queue import Kafka\n\nwith Diagram(name=\"Advanced Web Service with On-Premises (colored)\", show=False):\n    ingress = Nginx(\"ingress\")\n\n    metrics = Prometheus(\"metric\")\n    metrics << Edge(color=\"firebrick\", style=\"dashed\") << Grafana(\"monitoring\")\n\n    with Cluster(\"Service Cluster\"):\n        grpcsvc = [\n            Server(\"grpc1\"),\n            Server(\"grpc2\"),\n            Server(\"grpc3\")]\n\n    with Cluster(\"Sessions HA\"):\n        primary = Redis(\"session\")\n        primary \\\n            - Edge(color=\"brown\", style=\"dashed\") \\\n            - Redis(\"replica\") \\\n            << Edge(label=\"collect\") \\\n            << metrics\n        grpcsvc >> Edge(color=\"brown\") >> primary\n\n    with Cluster(\"Database HA\"):\n        primary = PostgreSQL(\"users\")\n        primary \\\n            - Edge(color=\"brown\", style=\"dotted\") \\\n            - PostgreSQL(\"replica\") \\\n            << Edge(label=\"collect\") \\\n            << metrics\n        grpcsvc >> Edge(color=\"black\") >> primary\n\n    aggregator = Fluentd(\"logging\")\n    aggregator \\\n        >> Edge(label=\"parse\") \\\n        >> Kafka(\"stream\") \\\n        >> Edge(color=\"black\", style=\"bold\") \\\n        >> Spark(\"analytics\")\n\n    ingress \\\n        >> Edge(color=\"darkgreen\") \\\n        << grpcsvc \\\n        >> Edge(color=\"darkorange\") \\\n        >> aggregator\n```\n![advanced web service with on-premise diagram colored](/img/advanced_web_service_with_on-premise_colored.png)\n\n## Less Edges\n\nAs you can see on the previous graph the edges can quickly become noisy. Below are two examples to solve this problem.\n\nOne approach is to get creative with the Node class to create blank placeholders, together with named nodes within Clusters, and then only pointing to single named elements within those Clusters.\n\nCompare the output below to the example output above .\n\n```python\nfrom diagrams import Cluster, Diagram, Node\nfrom diagrams.onprem.analytics import Spark\nfrom diagrams.onprem.compute import Server\nfrom diagrams.onprem.database import PostgreSQL\nfrom diagrams.onprem.inmemory import Redis\nfrom diagrams.onprem.aggregator import Fluentd\nfrom diagrams.onprem.monitoring import Grafana, Prometheus\nfrom diagrams.onprem.network import Nginx\nfrom diagrams.onprem.queue import Kafka\n\nwith Diagram(\"\\nAdvanced Web Service with On-Premise Less edges\", show=False) as diag:\n    ingress = Nginx(\"ingress\")\n\n    with Cluster(\"Service Cluster\"):\n        serv1 = Server(\"grpc1\")\n        serv2 = Server(\"grpc2\")\n        serv3 = Server(\"grpc3\")\n\n    with Cluster(\"\"):\n        blankHA = Node(\"\", shape=\"plaintext\", width=\"0\", height=\"0\")\n\n        metrics = Prometheus(\"metric\")\n        metrics << Grafana(\"monitoring\")\n\n        aggregator = Fluentd(\"logging\")\n        blankHA >> aggregator >> Kafka(\"stream\") >> Spark(\"analytics\")\n\n        with Cluster(\"Database HA\"):\n            db = PostgreSQL(\"users\")\n            db - PostgreSQL(\"replica\") << metrics\n            blankHA >> db\n\n        with Cluster(\"Sessions HA\"):\n            sess = Redis(\"session\")\n            sess - Redis(\"replica\") << metrics\n            blankHA >> sess\n\n    ingress >> serv2 >> blankHA\n\ndiag\n```\n\n![advanced web service with on-premise less edges](/img/advanced_web_service_with_on-premise_less_edges.png)\n\n## Merged Edges\n\nYet another option is to set the graph_attr dictionary key \"concentrate\" to \"true\".\n\nNote the following restrictions:\n\n1.  the Edge must end at the same headport\n2.  This only works when the \"splines\" graph_attr key is set to the value \"spline\". It has no effect when the value was set to \"ortho\", which is the default for the diagrams library.\n3. this will only work with the \"dot\" layout engine, which is the default for the diagrams library.\n\nFor more information see:\n\n  https://graphviz.gitlab.io/doc/info/attrs.html#d:concentrate\n\n  https://www.graphviz.org/pdf/dotguide.pdf Section 3.3 Concentrators\n\n\n\n```python\nfrom diagrams import Cluster, Diagram, Edge, Node\nfrom diagrams.onprem.analytics import Spark\nfrom diagrams.onprem.compute import Server\nfrom diagrams.onprem.database import PostgreSQL\nfrom diagrams.onprem.inmemory import Redis\nfrom diagrams.onprem.aggregator import Fluentd\nfrom diagrams.onprem.monitoring import Grafana, Prometheus\nfrom diagrams.onprem.network import Nginx\nfrom diagrams.onprem.queue import Kafka\n\ngraph_attr = {\n    \"concentrate\": \"true\",\n    \"splines\": \"spline\",\n}\n\nedge_attr = {\n    \"minlen\":\"3\",\n}\n\nwith Diagram(\"\\n\\nAdvanced Web Service with On-Premise Merged edges\", show=False,\n            graph_attr=graph_attr,\n            edge_attr=edge_attr) as diag:\n\n    ingress = Nginx(\"ingress\")\n\n    metrics = Prometheus(\"metric\")\n    metrics << Edge(minlen=\"0\") << Grafana(\"monitoring\")\n\n    with Cluster(\"Service Cluster\"):\n        grpsrv = [\n            Server(\"grpc1\"),\n            Server(\"grpc2\"),\n            Server(\"grpc3\")]\n\n    blank = Node(\"\", shape=\"plaintext\", height=\"0.0\", width=\"0.0\")\n\n    with Cluster(\"Sessions HA\"):\n        sess = Redis(\"session\")\n        sess - Redis(\"replica\") << metrics\n\n    with Cluster(\"Database HA\"):\n        db = PostgreSQL(\"users\")\n        db - PostgreSQL(\"replica\") << metrics\n\n    aggregator = Fluentd(\"logging\")\n    aggregator >> Kafka(\"stream\") >> Spark(\"analytics\")\n\n    ingress >> [grpsrv[0], grpsrv[1], grpsrv[2],]\n    [grpsrv[0], grpsrv[1], grpsrv[2],] - Edge(headport=\"w\", minlen=\"1\") - blank\n    blank >> Edge(headport=\"w\", minlen=\"2\") >> [sess, db, aggregator]\n\ndiag\n```\n![advanced web service with on-premise merged edges](/img/advanced_web_service_with_on-premise_merged_edges.png)\n"
  },
  {
    "path": "docs/guides/node.md",
    "content": "---\nid: node\ntitle: Nodes\n---\n\n`Node` is an object representing a node or system component.\n\n## Basic\n\n`Node` is an abstract concept that represents a single system component object.\n\nA node object consists of three parts: **provider**, **resource type** and **name**. You may already have seen each part in the previous example.\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\n\nwith Diagram(\"Simple Diagram\"):\n    EC2(\"web\")\n```\n\nIn the example above, the `EC2` is a node of resource type `compute` which is provided by the `aws` provider.\n\nYou can use other node objects in a similar manner:\n\n```python\n# aws resources\nfrom diagrams.aws.compute import ECS, Lambda\nfrom diagrams.aws.database import RDS, ElastiCache\nfrom diagrams.aws.network import ELB, Route53, VPC\n...\n\n# azure resources\nfrom diagrams.azure.compute import FunctionApps\nfrom diagrams.azure.storage import BlobStorage\n...\n\n# alibaba cloud resources\nfrom diagrams.alibabacloud.compute import ECS\nfrom diagrams.alibabacloud.storage import ObjectTableStore\n...\n\n# gcp resources\nfrom diagrams.gcp.compute import AppEngine, GKE\nfrom diagrams.gcp.ml import AutoML\n...\n\n# k8s resources\nfrom diagrams.k8s.compute import Pod, StatefulSet\nfrom diagrams.k8s.network import Service\nfrom diagrams.k8s.storage import PV, PVC, StorageClass\n...\n\n# oracle resources\nfrom diagrams.oci.compute import VirtualMachine, Container\nfrom diagrams.oci.network import Firewall\nfrom diagrams.oci.storage import FileStorage, StorageGateway\n```\n\nYou can find lists of all available nodes for each provider in the sidebar on the left.\n\nFor example, [here](https://diagrams.mingrammer.com/docs/nodes/aws) is the list of all available AWS nodes.\n\n## Data Flow\n\nYou can represent data flow by connecting the nodes with the operators `>>`, `<<`, and `-`.\n\n- **>>** connects nodes in left to right direction.\n- **<<** connects nodes in right to left direction.\n- **-** connects nodes in no direction. Undirected.\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\nfrom diagrams.aws.storage import S3\n\nwith Diagram(\"Web Services\", show=False):\n    ELB(\"lb\") >> EC2(\"web\") >> RDS(\"userdb\") >> S3(\"store\")\n    ELB(\"lb\") >> EC2(\"web\") >> RDS(\"userdb\") << EC2(\"stat\")\n    (ELB(\"lb\") >> EC2(\"web\")) - EC2(\"web\") >> RDS(\"userdb\")\n```\n\n> Be careful when using `-` and any shift operators together. It can cause unexpected results due to Python's operator precedence, so you might have to use parentheses.\n\n![web services diagram](/img/web_services_diagram.png)\n\n> The order of rendered diagrams is the reverse of the declaration order.\n\nYou can change the data flow direction with the `direction` parameter. The default is **LR**.\n\n> Allowed values are: TB, BT, LR, and RL\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\n\nwith Diagram(\"Workers\", show=False, direction=\"TB\"):\n    lb = ELB(\"lb\")\n    db = RDS(\"events\")\n    lb >> EC2(\"worker1\") >> db\n    lb >> EC2(\"worker2\") >> db\n    lb >> EC2(\"worker3\") >> db\n    lb >> EC2(\"worker4\") >> db\n    lb >> EC2(\"worker5\") >> db\n```\n\n![workers diagram](/img/workers_diagram.png)\n\n## Group Data Flow\n\nThe above worker example has too many redundant flows. To avoid this, you can group nodes into a list so that all nodes are connected to other nodes at once:\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\n\nwith Diagram(\"Grouped Workers\", show=False, direction=\"TB\"):\n    ELB(\"lb\") >> [EC2(\"worker1\"),\n                  EC2(\"worker2\"),\n                  EC2(\"worker3\"),\n                  EC2(\"worker4\"),\n                  EC2(\"worker5\")] >> RDS(\"events\")\n```\n\n![grouped workers diagram](/img/grouped_workers_diagram.png)\n\n> You can't connect two **lists** directly because shift/arithmetic operations between lists are not allowed in Python.\n"
  },
  {
    "path": "docs/nodes/alibabacloud.md",
    "content": "---\nid: alibabacloud\ntitle: AlibabaCloud\n---\n\nNode classes list of the alibabacloud provider.\n\n## alibabacloud.analytics\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/analytics/analytic-db.png\" alt=\"AnalyticDb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.analytics.AnalyticDb**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/analytics/click-house.png\" alt=\"ClickHouse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.analytics.ClickHouse**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/analytics/data-lake-analytics.png\" alt=\"DataLakeAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.analytics.DataLakeAnalytics**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/analytics/elatic-map-reduce.png\" alt=\"ElaticMapReduce\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.analytics.ElaticMapReduce**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/analytics/open-search.png\" alt=\"OpenSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.analytics.OpenSearch**\n\n## alibabacloud.application\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/api-gateway.png\" alt=\"ApiGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.ApiGateway**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/bee-bot.png\" alt=\"BeeBot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.BeeBot**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/blockchain-as-a-service.png\" alt=\"BlockchainAsAService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.BlockchainAsAService**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/cloud-call-center.png\" alt=\"CloudCallCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.CloudCallCenter**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/code-pipeline.png\" alt=\"CodePipeline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.CodePipeline**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/direct-mail.png\" alt=\"DirectMail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.DirectMail**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/log-service.png\" alt=\"LogService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.LogService**, **SLS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/message-notification-service.png\" alt=\"MessageNotificationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.MessageNotificationService**, **MNS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/node-js-performance-platform.png\" alt=\"NodeJsPerformancePlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.NodeJsPerformancePlatform**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/open-search.png\" alt=\"OpenSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.OpenSearch**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/performance-testing-service.png\" alt=\"PerformanceTestingService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.PerformanceTestingService**, **PTS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/rd-cloud.png\" alt=\"RdCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.RdCloud**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/smart-conversation-analysis.png\" alt=\"SmartConversationAnalysis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.SmartConversationAnalysis**, **SCA** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/application/yida.png\" alt=\"Yida\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.application.Yida**\n\n## alibabacloud.communication\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/communication/direct-mail.png\" alt=\"DirectMail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.communication.DirectMail**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/communication/mobile-push.png\" alt=\"MobilePush\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.communication.MobilePush**\n\n## alibabacloud.compute\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/auto-scaling.png\" alt=\"AutoScaling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.AutoScaling**, **ESS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/batch-compute.png\" alt=\"BatchCompute\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.BatchCompute**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/container-registry.png\" alt=\"ContainerRegistry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ContainerRegistry**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/container-service.png\" alt=\"ContainerService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ContainerService**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/elastic-compute-service.png\" alt=\"ElasticComputeService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ElasticComputeService**, **ECS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/elastic-container-instance.png\" alt=\"ElasticContainerInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ElasticContainerInstance**, **ECI** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/elastic-high-performance-computing.png\" alt=\"ElasticHighPerformanceComputing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ElasticHighPerformanceComputing**, **EHPC** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/elastic-search.png\" alt=\"ElasticSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ElasticSearch**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/function-compute.png\" alt=\"FunctionCompute\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.FunctionCompute**, **FC** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/operation-orchestration-service.png\" alt=\"OperationOrchestrationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.OperationOrchestrationService**, **OOS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/resource-orchestration-service.png\" alt=\"ResourceOrchestrationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ResourceOrchestrationService**, **ROS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/server-load-balancer.png\" alt=\"ServerLoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ServerLoadBalancer**, **SLB** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/serverless-app-engine.png\" alt=\"ServerlessAppEngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.ServerlessAppEngine**, **SAE** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/simple-application-server.png\" alt=\"SimpleApplicationServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.SimpleApplicationServer**, **SAS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/compute/web-app-service.png\" alt=\"WebAppService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.compute.WebAppService**, **WAS** (alias)\n\n## alibabacloud.database\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-cassandra.png\" alt=\"ApsaradbCassandra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbCassandra**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-hbase.png\" alt=\"ApsaradbHbase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbHbase**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-memcache.png\" alt=\"ApsaradbMemcache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbMemcache**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-mongodb.png\" alt=\"ApsaradbMongodb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbMongodb**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-oceanbase.png\" alt=\"ApsaradbOceanbase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbOceanbase**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-polardb.png\" alt=\"ApsaradbPolardb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbPolardb**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-postgresql.png\" alt=\"ApsaradbPostgresql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbPostgresql**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-ppas.png\" alt=\"ApsaradbPpas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbPpas**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-redis.png\" alt=\"ApsaradbRedis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbRedis**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/apsaradb-sqlserver.png\" alt=\"ApsaradbSqlserver\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.ApsaradbSqlserver**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/data-management-service.png\" alt=\"DataManagementService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.DataManagementService**, **DMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/data-transmission-service.png\" alt=\"DataTransmissionService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.DataTransmissionService**, **DTS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/database-backup-service.png\" alt=\"DatabaseBackupService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.DatabaseBackupService**, **DBS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/disribute-relational-database-service.png\" alt=\"DisributeRelationalDatabaseService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.DisributeRelationalDatabaseService**, **DRDS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/graph-database-service.png\" alt=\"GraphDatabaseService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.GraphDatabaseService**, **GDS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/hybriddb-for-mysql.png\" alt=\"HybriddbForMysql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.HybriddbForMysql**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/database/relational-database-service.png\" alt=\"RelationalDatabaseService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.database.RelationalDatabaseService**, **RDS** (alias)\n\n## alibabacloud.iot\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/iot/iot-internet-device-id.png\" alt=\"IotInternetDeviceId\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.iot.IotInternetDeviceId**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/iot/iot-link-wan.png\" alt=\"IotLinkWan\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.iot.IotLinkWan**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/iot/iot-mobile-connection-package.png\" alt=\"IotMobileConnectionPackage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.iot.IotMobileConnectionPackage**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/iot/iot-platform.png\" alt=\"IotPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.iot.IotPlatform**\n\n## alibabacloud.network\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/cdn.png\" alt=\"Cdn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.Cdn**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/cloud-enterprise-network.png\" alt=\"CloudEnterpriseNetwork\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.CloudEnterpriseNetwork**, **CEN** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/elastic-ip-address.png\" alt=\"ElasticIpAddress\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.ElasticIpAddress**, **EIP** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/express-connect.png\" alt=\"ExpressConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.ExpressConnect**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/nat-gateway.png\" alt=\"NatGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.NatGateway**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/server-load-balancer.png\" alt=\"ServerLoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.ServerLoadBalancer**, **SLB** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/smart-access-gateway.png\" alt=\"SmartAccessGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.SmartAccessGateway**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/virtual-private-cloud.png\" alt=\"VirtualPrivateCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.VirtualPrivateCloud**, **VPC** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/network/vpn-gateway.png\" alt=\"VpnGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.network.VpnGateway**\n\n## alibabacloud.security\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/anti-bot-service.png\" alt=\"AntiBotService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.AntiBotService**, **ABS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/anti-ddos-basic.png\" alt=\"AntiDdosBasic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.AntiDdosBasic**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/anti-ddos-pro.png\" alt=\"AntiDdosPro\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.AntiDdosPro**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/antifraud-service.png\" alt=\"AntifraudService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.AntifraudService**, **AS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/bastion-host.png\" alt=\"BastionHost\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.BastionHost**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/cloud-firewall.png\" alt=\"CloudFirewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.CloudFirewall**, **CFW** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/cloud-security-scanner.png\" alt=\"CloudSecurityScanner\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.CloudSecurityScanner**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/content-moderation.png\" alt=\"ContentModeration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.ContentModeration**, **CM** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/crowdsourced-security-testing.png\" alt=\"CrowdsourcedSecurityTesting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.CrowdsourcedSecurityTesting**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/data-encryption-service.png\" alt=\"DataEncryptionService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.DataEncryptionService**, **DES** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/db-audit.png\" alt=\"DbAudit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.DbAudit**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/game-shield.png\" alt=\"GameShield\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.GameShield**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/id-verification.png\" alt=\"IdVerification\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.IdVerification**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/managed-security-service.png\" alt=\"ManagedSecurityService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.ManagedSecurityService**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/security-center.png\" alt=\"SecurityCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.SecurityCenter**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/server-guard.png\" alt=\"ServerGuard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.ServerGuard**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/ssl-certificates.png\" alt=\"SslCertificates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.SslCertificates**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/security/web-application-firewall.png\" alt=\"WebApplicationFirewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.security.WebApplicationFirewall**, **WAF** (alias)\n\n## alibabacloud.storage\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/cloud-storage-gateway.png\" alt=\"CloudStorageGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.CloudStorageGateway**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/file-storage-hdfs.png\" alt=\"FileStorageHdfs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.FileStorageHdfs**, **HDFS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/file-storage-nas.png\" alt=\"FileStorageNas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.FileStorageNas**, **NAS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/hybrid-backup-recovery.png\" alt=\"HybridBackupRecovery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.HybridBackupRecovery**, **HBR** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/hybrid-cloud-disaster-recovery.png\" alt=\"HybridCloudDisasterRecovery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.HybridCloudDisasterRecovery**, **HDR** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/imm.png\" alt=\"Imm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.Imm**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/object-storage-service.png\" alt=\"ObjectStorageService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.ObjectStorageService**, **OSS** (alias)\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/storage/object-table-store.png\" alt=\"ObjectTableStore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.storage.ObjectTableStore**, **OTS** (alias)\n\n## alibabacloud.web\n\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/web/dns.png\" alt=\"Dns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.web.Dns**\n\n<img width=\"30\" src=\"/img/resources/alibabacloud/web/domain.png\" alt=\"Domain\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.alibabacloud.web.Domain**\n"
  },
  {
    "path": "docs/nodes/aws.md",
    "content": "---\nid: aws\ntitle: AWS\n---\n\nNode classes list of the aws provider.\n\n## aws.analytics\n\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/amazon-opensearch-service.png\" alt=\"AmazonOpensearchService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.AmazonOpensearchService**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/analytics.png\" alt=\"Analytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Analytics**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/athena.png\" alt=\"Athena\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Athena**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/cloudsearch-search-documents.png\" alt=\"CloudsearchSearchDocuments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.CloudsearchSearchDocuments**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/cloudsearch.png\" alt=\"Cloudsearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Cloudsearch**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/data-lake-resource.png\" alt=\"DataLakeResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.DataLakeResource**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/data-pipeline.png\" alt=\"DataPipeline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.DataPipeline**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/elasticsearch-service.png\" alt=\"ElasticsearchService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.ElasticsearchService**, **ES** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-cluster.png\" alt=\"EMRCluster\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMRCluster**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-engine-mapr-m3.png\" alt=\"EMREngineMaprM3\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMREngineMaprM3**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-engine-mapr-m5.png\" alt=\"EMREngineMaprM5\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMREngineMaprM5**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-engine-mapr-m7.png\" alt=\"EMREngineMaprM7\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMREngineMaprM7**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-engine.png\" alt=\"EMREngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMREngine**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr-hdfs-cluster.png\" alt=\"EMRHdfsCluster\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMRHdfsCluster**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/emr.png\" alt=\"EMR\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.EMR**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/glue-crawlers.png\" alt=\"GlueCrawlers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.GlueCrawlers**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/glue-data-catalog.png\" alt=\"GlueDataCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.GlueDataCatalog**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/glue.png\" alt=\"Glue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Glue**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/kinesis-data-analytics.png\" alt=\"KinesisDataAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.KinesisDataAnalytics**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/kinesis-data-firehose.png\" alt=\"KinesisDataFirehose\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.KinesisDataFirehose**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/kinesis-data-streams.png\" alt=\"KinesisDataStreams\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.KinesisDataStreams**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/kinesis-video-streams.png\" alt=\"KinesisVideoStreams\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.KinesisVideoStreams**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/kinesis.png\" alt=\"Kinesis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Kinesis**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/lake-formation.png\" alt=\"LakeFormation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.LakeFormation**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/managed-streaming-for-kafka.png\" alt=\"ManagedStreamingForKafka\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.ManagedStreamingForKafka**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/quicksight.png\" alt=\"Quicksight\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Quicksight**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/redshift-dense-compute-node.png\" alt=\"RedshiftDenseComputeNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.RedshiftDenseComputeNode**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/redshift-dense-storage-node.png\" alt=\"RedshiftDenseStorageNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.RedshiftDenseStorageNode**\n\n<img width=\"30\" src=\"/img/resources/aws/analytics/redshift.png\" alt=\"Redshift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.analytics.Redshift**\n\n## aws.ar\n\n\n<img width=\"30\" src=\"/img/resources/aws/ar/ar-vr.png\" alt=\"ArVr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ar.ArVr**\n\n<img width=\"30\" src=\"/img/resources/aws/ar/sumerian.png\" alt=\"Sumerian\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ar.Sumerian**\n\n## aws.blockchain\n\n\n<img width=\"30\" src=\"/img/resources/aws/blockchain/blockchain-resource.png\" alt=\"BlockchainResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.blockchain.BlockchainResource**\n\n<img width=\"30\" src=\"/img/resources/aws/blockchain/blockchain.png\" alt=\"Blockchain\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.blockchain.Blockchain**\n\n<img width=\"30\" src=\"/img/resources/aws/blockchain/managed-blockchain.png\" alt=\"ManagedBlockchain\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.blockchain.ManagedBlockchain**\n\n<img width=\"30\" src=\"/img/resources/aws/blockchain/quantum-ledger-database-qldb.png\" alt=\"QuantumLedgerDatabaseQldb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.blockchain.QuantumLedgerDatabaseQldb**, **QLDB** (alias)\n\n## aws.business\n\n\n<img width=\"30\" src=\"/img/resources/aws/business/alexa-for-business.png\" alt=\"AlexaForBusiness\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.business.AlexaForBusiness**, **A4B** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/business/business-applications.png\" alt=\"BusinessApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.business.BusinessApplications**\n\n<img width=\"30\" src=\"/img/resources/aws/business/chime.png\" alt=\"Chime\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.business.Chime**\n\n<img width=\"30\" src=\"/img/resources/aws/business/workmail.png\" alt=\"Workmail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.business.Workmail**\n\n## aws.compute\n\n\n<img width=\"30\" src=\"/img/resources/aws/compute/app-runner.png\" alt=\"AppRunner\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.AppRunner**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/application-auto-scaling.png\" alt=\"ApplicationAutoScaling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ApplicationAutoScaling**, **AutoScaling** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/batch.png\" alt=\"Batch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Batch**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/compute-optimizer.png\" alt=\"ComputeOptimizer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ComputeOptimizer**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/compute.png\" alt=\"Compute\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Compute**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-ami.png\" alt=\"EC2Ami\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2Ami**, **AMI** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-auto-scaling.png\" alt=\"EC2AutoScaling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2AutoScaling**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-container-registry-image.png\" alt=\"EC2ContainerRegistryImage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2ContainerRegistryImage**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-container-registry-registry.png\" alt=\"EC2ContainerRegistryRegistry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2ContainerRegistryRegistry**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-container-registry.png\" alt=\"EC2ContainerRegistry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2ContainerRegistry**, **ECR** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-elastic-ip-address.png\" alt=\"EC2ElasticIpAddress\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2ElasticIpAddress**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-image-builder.png\" alt=\"EC2ImageBuilder\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2ImageBuilder**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-instance.png\" alt=\"EC2Instance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2Instance**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-instances.png\" alt=\"EC2Instances\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2Instances**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-rescue.png\" alt=\"EC2Rescue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2Rescue**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2-spot-instance.png\" alt=\"EC2SpotInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2SpotInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/ec2.png\" alt=\"EC2\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.EC2**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-beanstalk-application.png\" alt=\"ElasticBeanstalkApplication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticBeanstalkApplication**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-beanstalk-deployment.png\" alt=\"ElasticBeanstalkDeployment\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticBeanstalkDeployment**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-beanstalk.png\" alt=\"ElasticBeanstalk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticBeanstalk**, **EB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-container-service-container.png\" alt=\"ElasticContainerServiceContainer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticContainerServiceContainer**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-container-service-service-connect.png\" alt=\"ElasticContainerServiceServiceConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticContainerServiceServiceConnect**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-container-service-service.png\" alt=\"ElasticContainerServiceService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticContainerServiceService**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-container-service-task.png\" alt=\"ElasticContainerServiceTask\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticContainerServiceTask**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-container-service.png\" alt=\"ElasticContainerService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticContainerService**, **ECS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/elastic-kubernetes-service.png\" alt=\"ElasticKubernetesService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ElasticKubernetesService**, **EKS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/fargate.png\" alt=\"Fargate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Fargate**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/lambda-function.png\" alt=\"LambdaFunction\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.LambdaFunction**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/lambda.png\" alt=\"Lambda\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Lambda**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/lightsail.png\" alt=\"Lightsail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Lightsail**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/local-zones.png\" alt=\"LocalZones\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.LocalZones**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/outposts.png\" alt=\"Outposts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Outposts**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/serverless-application-repository.png\" alt=\"ServerlessApplicationRepository\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ServerlessApplicationRepository**, **SAR** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-deadline.png\" alt=\"ThinkboxDeadline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxDeadline**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-draft.png\" alt=\"ThinkboxDraft\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxDraft**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-frost.png\" alt=\"ThinkboxFrost\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxFrost**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-krakatoa.png\" alt=\"ThinkboxKrakatoa\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxKrakatoa**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-sequoia.png\" alt=\"ThinkboxSequoia\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxSequoia**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-stoke.png\" alt=\"ThinkboxStoke\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxStoke**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/thinkbox-xmesh.png\" alt=\"ThinkboxXmesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.ThinkboxXmesh**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/vmware-cloud-on-aws.png\" alt=\"VmwareCloudOnAWS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.VmwareCloudOnAWS**\n\n<img width=\"30\" src=\"/img/resources/aws/compute/wavelength.png\" alt=\"Wavelength\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.compute.Wavelength**\n\n## aws.cost\n\n\n<img width=\"30\" src=\"/img/resources/aws/cost/budgets.png\" alt=\"Budgets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.Budgets**\n\n<img width=\"30\" src=\"/img/resources/aws/cost/cost-and-usage-report.png\" alt=\"CostAndUsageReport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.CostAndUsageReport**\n\n<img width=\"30\" src=\"/img/resources/aws/cost/cost-explorer.png\" alt=\"CostExplorer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.CostExplorer**\n\n<img width=\"30\" src=\"/img/resources/aws/cost/cost-management.png\" alt=\"CostManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.CostManagement**\n\n<img width=\"30\" src=\"/img/resources/aws/cost/reserved-instance-reporting.png\" alt=\"ReservedInstanceReporting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.ReservedInstanceReporting**\n\n<img width=\"30\" src=\"/img/resources/aws/cost/savings-plans.png\" alt=\"SavingsPlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.cost.SavingsPlans**\n\n## aws.database\n\n\n<img width=\"30\" src=\"/img/resources/aws/database/aurora-instance.png\" alt=\"AuroraInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.AuroraInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/aurora.png\" alt=\"Aurora\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Aurora**\n\n<img width=\"30\" src=\"/img/resources/aws/database/database-migration-service-database-migration-workflow.png\" alt=\"DatabaseMigrationServiceDatabaseMigrationWorkflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DatabaseMigrationServiceDatabaseMigrationWorkflow**\n\n<img width=\"30\" src=\"/img/resources/aws/database/database-migration-service.png\" alt=\"DatabaseMigrationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DatabaseMigrationService**, **DMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/database.png\" alt=\"Database\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Database**, **DB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/documentdb-mongodb-compatibility.png\" alt=\"DocumentdbMongodbCompatibility\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DocumentdbMongodbCompatibility**, **DocumentDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-attribute.png\" alt=\"DynamodbAttribute\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbAttribute**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-attributes.png\" alt=\"DynamodbAttributes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbAttributes**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-dax.png\" alt=\"DynamodbDax\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbDax**, **DAX** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-global-secondary-index.png\" alt=\"DynamodbGlobalSecondaryIndex\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbGlobalSecondaryIndex**, **DynamodbGSI** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-item.png\" alt=\"DynamodbItem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbItem**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-items.png\" alt=\"DynamodbItems\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbItems**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-streams.png\" alt=\"DynamodbStreams\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbStreams**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb-table.png\" alt=\"DynamodbTable\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.DynamodbTable**\n\n<img width=\"30\" src=\"/img/resources/aws/database/dynamodb.png\" alt=\"Dynamodb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Dynamodb**, **DDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/elasticache-cache-node.png\" alt=\"ElasticacheCacheNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.ElasticacheCacheNode**\n\n<img width=\"30\" src=\"/img/resources/aws/database/elasticache-for-memcached.png\" alt=\"ElasticacheForMemcached\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.ElasticacheForMemcached**\n\n<img width=\"30\" src=\"/img/resources/aws/database/elasticache-for-redis.png\" alt=\"ElasticacheForRedis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.ElasticacheForRedis**\n\n<img width=\"30\" src=\"/img/resources/aws/database/elasticache.png\" alt=\"Elasticache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Elasticache**, **ElastiCache** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/keyspaces-managed-apache-cassandra-service.png\" alt=\"KeyspacesManagedApacheCassandraService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.KeyspacesManagedApacheCassandraService**\n\n<img width=\"30\" src=\"/img/resources/aws/database/neptune.png\" alt=\"Neptune\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Neptune**\n\n<img width=\"30\" src=\"/img/resources/aws/database/quantum-ledger-database-qldb.png\" alt=\"QuantumLedgerDatabaseQldb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.QuantumLedgerDatabaseQldb**, **QLDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-instance.png\" alt=\"RDSInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-mariadb-instance.png\" alt=\"RDSMariadbInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSMariadbInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-mysql-instance.png\" alt=\"RDSMysqlInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSMysqlInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-on-vmware.png\" alt=\"RDSOnVmware\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSOnVmware**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-oracle-instance.png\" alt=\"RDSOracleInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSOracleInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-postgresql-instance.png\" alt=\"RDSPostgresqlInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSPostgresqlInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds-sql-server-instance.png\" alt=\"RDSSqlServerInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDSSqlServerInstance**\n\n<img width=\"30\" src=\"/img/resources/aws/database/rds.png\" alt=\"RDS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RDS**\n\n<img width=\"30\" src=\"/img/resources/aws/database/redshift-dense-compute-node.png\" alt=\"RedshiftDenseComputeNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RedshiftDenseComputeNode**\n\n<img width=\"30\" src=\"/img/resources/aws/database/redshift-dense-storage-node.png\" alt=\"RedshiftDenseStorageNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.RedshiftDenseStorageNode**\n\n<img width=\"30\" src=\"/img/resources/aws/database/redshift.png\" alt=\"Redshift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Redshift**\n\n<img width=\"30\" src=\"/img/resources/aws/database/timestream.png\" alt=\"Timestream\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.database.Timestream**\n\n## aws.devtools\n\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/cloud-development-kit.png\" alt=\"CloudDevelopmentKit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.CloudDevelopmentKit**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/cloud9-resource.png\" alt=\"Cloud9Resource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Cloud9Resource**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/cloud9.png\" alt=\"Cloud9\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Cloud9**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/cloudshell.png\" alt=\"Cloudshell\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Cloudshell**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codeartifact.png\" alt=\"Codeartifact\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codeartifact**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codebuild.png\" alt=\"Codebuild\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codebuild**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codecommit.png\" alt=\"Codecommit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codecommit**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codedeploy.png\" alt=\"Codedeploy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codedeploy**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codepipeline.png\" alt=\"Codepipeline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codepipeline**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/codestar.png\" alt=\"Codestar\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.Codestar**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/command-line-interface.png\" alt=\"CommandLineInterface\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.CommandLineInterface**, **CLI** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/developer-tools.png\" alt=\"DeveloperTools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.DeveloperTools**, **DevTools** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/tools-and-sdks.png\" alt=\"ToolsAndSdks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.ToolsAndSdks**\n\n<img width=\"30\" src=\"/img/resources/aws/devtools/x-ray.png\" alt=\"XRay\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.devtools.XRay**\n\n## aws.enablement\n\n\n<img width=\"30\" src=\"/img/resources/aws/enablement/customer-enablement.png\" alt=\"CustomerEnablement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enablement.CustomerEnablement**\n\n<img width=\"30\" src=\"/img/resources/aws/enablement/iq.png\" alt=\"Iq\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enablement.Iq**\n\n<img width=\"30\" src=\"/img/resources/aws/enablement/managed-services.png\" alt=\"ManagedServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enablement.ManagedServices**\n\n<img width=\"30\" src=\"/img/resources/aws/enablement/professional-services.png\" alt=\"ProfessionalServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enablement.ProfessionalServices**\n\n<img width=\"30\" src=\"/img/resources/aws/enablement/support.png\" alt=\"Support\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enablement.Support**\n\n## aws.enduser\n\n\n<img width=\"30\" src=\"/img/resources/aws/enduser/appstream-2-0.png\" alt=\"Appstream20\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enduser.Appstream20**\n\n<img width=\"30\" src=\"/img/resources/aws/enduser/desktop-and-app-streaming.png\" alt=\"DesktopAndAppStreaming\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enduser.DesktopAndAppStreaming**\n\n<img width=\"30\" src=\"/img/resources/aws/enduser/workdocs.png\" alt=\"Workdocs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enduser.Workdocs**\n\n<img width=\"30\" src=\"/img/resources/aws/enduser/worklink.png\" alt=\"Worklink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enduser.Worklink**\n\n<img width=\"30\" src=\"/img/resources/aws/enduser/workspaces.png\" alt=\"Workspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.enduser.Workspaces**\n\n## aws.engagement\n\n\n<img width=\"30\" src=\"/img/resources/aws/engagement/connect.png\" alt=\"Connect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.engagement.Connect**\n\n<img width=\"30\" src=\"/img/resources/aws/engagement/customer-engagement.png\" alt=\"CustomerEngagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.engagement.CustomerEngagement**\n\n<img width=\"30\" src=\"/img/resources/aws/engagement/pinpoint.png\" alt=\"Pinpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.engagement.Pinpoint**\n\n<img width=\"30\" src=\"/img/resources/aws/engagement/simple-email-service-ses-email.png\" alt=\"SimpleEmailServiceSesEmail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.engagement.SimpleEmailServiceSesEmail**\n\n<img width=\"30\" src=\"/img/resources/aws/engagement/simple-email-service-ses.png\" alt=\"SimpleEmailServiceSes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.engagement.SimpleEmailServiceSes**, **SES** (alias)\n\n## aws.game\n\n\n<img width=\"30\" src=\"/img/resources/aws/game/game-tech.png\" alt=\"GameTech\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.game.GameTech**\n\n<img width=\"30\" src=\"/img/resources/aws/game/gamelift.png\" alt=\"Gamelift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.game.Gamelift**\n\n## aws.general\n\n\n<img width=\"30\" src=\"/img/resources/aws/general/client.png\" alt=\"Client\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Client**\n\n<img width=\"30\" src=\"/img/resources/aws/general/disk.png\" alt=\"Disk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Disk**\n\n<img width=\"30\" src=\"/img/resources/aws/general/forums.png\" alt=\"Forums\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Forums**\n\n<img width=\"30\" src=\"/img/resources/aws/general/general.png\" alt=\"General\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.General**\n\n<img width=\"30\" src=\"/img/resources/aws/general/generic-database.png\" alt=\"GenericDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.GenericDatabase**\n\n<img width=\"30\" src=\"/img/resources/aws/general/generic-firewall.png\" alt=\"GenericFirewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.GenericFirewall**\n\n<img width=\"30\" src=\"/img/resources/aws/general/generic-office-building.png\" alt=\"GenericOfficeBuilding\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.GenericOfficeBuilding**, **OfficeBuilding** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/general/generic-saml-token.png\" alt=\"GenericSamlToken\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.GenericSamlToken**\n\n<img width=\"30\" src=\"/img/resources/aws/general/generic-sdk.png\" alt=\"GenericSDK\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.GenericSDK**\n\n<img width=\"30\" src=\"/img/resources/aws/general/internet-alt1.png\" alt=\"InternetAlt1\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.InternetAlt1**\n\n<img width=\"30\" src=\"/img/resources/aws/general/internet-alt2.png\" alt=\"InternetAlt2\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.InternetAlt2**\n\n<img width=\"30\" src=\"/img/resources/aws/general/internet-gateway.png\" alt=\"InternetGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.InternetGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/general/marketplace.png\" alt=\"Marketplace\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Marketplace**\n\n<img width=\"30\" src=\"/img/resources/aws/general/mobile-client.png\" alt=\"MobileClient\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.MobileClient**\n\n<img width=\"30\" src=\"/img/resources/aws/general/multimedia.png\" alt=\"Multimedia\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Multimedia**\n\n<img width=\"30\" src=\"/img/resources/aws/general/office-building.png\" alt=\"OfficeBuilding\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.OfficeBuilding**\n\n<img width=\"30\" src=\"/img/resources/aws/general/saml-token.png\" alt=\"SamlToken\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.SamlToken**\n\n<img width=\"30\" src=\"/img/resources/aws/general/sdk.png\" alt=\"SDK\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.SDK**\n\n<img width=\"30\" src=\"/img/resources/aws/general/ssl-padlock.png\" alt=\"SslPadlock\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.SslPadlock**\n\n<img width=\"30\" src=\"/img/resources/aws/general/tape-storage.png\" alt=\"TapeStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.TapeStorage**\n\n<img width=\"30\" src=\"/img/resources/aws/general/toolkit.png\" alt=\"Toolkit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Toolkit**\n\n<img width=\"30\" src=\"/img/resources/aws/general/traditional-server.png\" alt=\"TraditionalServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.TraditionalServer**\n\n<img width=\"30\" src=\"/img/resources/aws/general/user.png\" alt=\"User\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.User**\n\n<img width=\"30\" src=\"/img/resources/aws/general/users.png\" alt=\"Users\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.general.Users**\n\n## aws.integration\n\n\n<img width=\"30\" src=\"/img/resources/aws/integration/application-integration.png\" alt=\"ApplicationIntegration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.ApplicationIntegration**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/appsync.png\" alt=\"Appsync\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.Appsync**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/console-mobile-application.png\" alt=\"ConsoleMobileApplication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.ConsoleMobileApplication**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/event-resource.png\" alt=\"EventResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventResource**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-custom-event-bus-resource.png\" alt=\"EventbridgeCustomEventBusResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeCustomEventBusResource**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-default-event-bus-resource.png\" alt=\"EventbridgeDefaultEventBusResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeDefaultEventBusResource**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-event.png\" alt=\"EventbridgeEvent\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeEvent**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-pipes.png\" alt=\"EventbridgePipes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgePipes**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-rule.png\" alt=\"EventbridgeRule\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeRule**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-saas-partner-event-bus-resource.png\" alt=\"EventbridgeSaasPartnerEventBusResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeSaasPartnerEventBusResource**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-scheduler.png\" alt=\"EventbridgeScheduler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeScheduler**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge-schema.png\" alt=\"EventbridgeSchema\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.EventbridgeSchema**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/eventbridge.png\" alt=\"Eventbridge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.Eventbridge**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/express-workflows.png\" alt=\"ExpressWorkflows\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.ExpressWorkflows**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/mq.png\" alt=\"MQ\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.MQ**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-notification-service-sns-email-notification.png\" alt=\"SimpleNotificationServiceSnsEmailNotification\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleNotificationServiceSnsEmailNotification**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-notification-service-sns-http-notification.png\" alt=\"SimpleNotificationServiceSnsHttpNotification\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleNotificationServiceSnsHttpNotification**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-notification-service-sns-topic.png\" alt=\"SimpleNotificationServiceSnsTopic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleNotificationServiceSnsTopic**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-notification-service-sns.png\" alt=\"SimpleNotificationServiceSns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleNotificationServiceSns**, **SNS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-queue-service-sqs-message.png\" alt=\"SimpleQueueServiceSqsMessage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleQueueServiceSqsMessage**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-queue-service-sqs-queue.png\" alt=\"SimpleQueueServiceSqsQueue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleQueueServiceSqsQueue**\n\n<img width=\"30\" src=\"/img/resources/aws/integration/simple-queue-service-sqs.png\" alt=\"SimpleQueueServiceSqs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.SimpleQueueServiceSqs**, **SQS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/integration/step-functions.png\" alt=\"StepFunctions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.integration.StepFunctions**, **SF** (alias)\n\n## aws.iot\n\n\n<img width=\"30\" src=\"/img/resources/aws/iot/freertos.png\" alt=\"Freertos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.Freertos**, **FreeRTOS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/iot/internet-of-things.png\" alt=\"InternetOfThings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.InternetOfThings**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-1-click.png\" alt=\"Iot1Click\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.Iot1Click**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-action.png\" alt=\"IotAction\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAction**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-actuator.png\" alt=\"IotActuator\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotActuator**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-alexa-echo.png\" alt=\"IotAlexaEcho\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAlexaEcho**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-alexa-enabled-device.png\" alt=\"IotAlexaEnabledDevice\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAlexaEnabledDevice**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-alexa-skill.png\" alt=\"IotAlexaSkill\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAlexaSkill**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-alexa-voice-service.png\" alt=\"IotAlexaVoiceService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAlexaVoiceService**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics-channel.png\" alt=\"IotAnalyticsChannel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalyticsChannel**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics-data-set.png\" alt=\"IotAnalyticsDataSet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalyticsDataSet**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics-data-store.png\" alt=\"IotAnalyticsDataStore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalyticsDataStore**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics-notebook.png\" alt=\"IotAnalyticsNotebook\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalyticsNotebook**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics-pipeline.png\" alt=\"IotAnalyticsPipeline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalyticsPipeline**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-analytics.png\" alt=\"IotAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotAnalytics**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-bank.png\" alt=\"IotBank\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotBank**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-bicycle.png\" alt=\"IotBicycle\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotBicycle**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-button.png\" alt=\"IotButton\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotButton**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-camera.png\" alt=\"IotCamera\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCamera**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-car.png\" alt=\"IotCar\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCar**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-cart.png\" alt=\"IotCart\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCart**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-certificate.png\" alt=\"IotCertificate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCertificate**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-coffee-pot.png\" alt=\"IotCoffeePot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCoffeePot**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-core.png\" alt=\"IotCore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotCore**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-desired-state.png\" alt=\"IotDesiredState\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotDesiredState**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-device-defender.png\" alt=\"IotDeviceDefender\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotDeviceDefender**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-device-gateway.png\" alt=\"IotDeviceGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotDeviceGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-device-management.png\" alt=\"IotDeviceManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotDeviceManagement**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-door-lock.png\" alt=\"IotDoorLock\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotDoorLock**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-events.png\" alt=\"IotEvents\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotEvents**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-factory.png\" alt=\"IotFactory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotFactory**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-fire-tv-stick.png\" alt=\"IotFireTvStick\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotFireTvStick**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-fire-tv.png\" alt=\"IotFireTv\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotFireTv**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-generic.png\" alt=\"IotGeneric\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotGeneric**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-greengrass-connector.png\" alt=\"IotGreengrassConnector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotGreengrassConnector**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-greengrass.png\" alt=\"IotGreengrass\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotGreengrass**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-hardware-board.png\" alt=\"IotHardwareBoard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotHardwareBoard**, **IotBoard** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-house.png\" alt=\"IotHouse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotHouse**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-http.png\" alt=\"IotHttp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotHttp**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-http2.png\" alt=\"IotHttp2\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotHttp2**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-jobs.png\" alt=\"IotJobs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotJobs**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-lambda.png\" alt=\"IotLambda\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotLambda**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-lightbulb.png\" alt=\"IotLightbulb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotLightbulb**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-medical-emergency.png\" alt=\"IotMedicalEmergency\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotMedicalEmergency**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-mqtt.png\" alt=\"IotMqtt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotMqtt**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-over-the-air-update.png\" alt=\"IotOverTheAirUpdate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotOverTheAirUpdate**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-policy-emergency.png\" alt=\"IotPolicyEmergency\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotPolicyEmergency**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-policy.png\" alt=\"IotPolicy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotPolicy**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-reported-state.png\" alt=\"IotReportedState\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotReportedState**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-rule.png\" alt=\"IotRule\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotRule**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-sensor.png\" alt=\"IotSensor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotSensor**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-servo.png\" alt=\"IotServo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotServo**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-shadow.png\" alt=\"IotShadow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotShadow**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-simulator.png\" alt=\"IotSimulator\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotSimulator**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-sitewise.png\" alt=\"IotSitewise\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotSitewise**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-thermostat.png\" alt=\"IotThermostat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotThermostat**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-things-graph.png\" alt=\"IotThingsGraph\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotThingsGraph**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-topic.png\" alt=\"IotTopic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotTopic**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-travel.png\" alt=\"IotTravel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotTravel**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-utility.png\" alt=\"IotUtility\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotUtility**\n\n<img width=\"30\" src=\"/img/resources/aws/iot/iot-windfarm.png\" alt=\"IotWindfarm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.iot.IotWindfarm**\n\n## aws.management\n\n\n<img width=\"30\" src=\"/img/resources/aws/management/amazon-devops-guru.png\" alt=\"AmazonDevopsGuru\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.AmazonDevopsGuru**\n\n<img width=\"30\" src=\"/img/resources/aws/management/amazon-managed-grafana.png\" alt=\"AmazonManagedGrafana\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.AmazonManagedGrafana**\n\n<img width=\"30\" src=\"/img/resources/aws/management/amazon-managed-prometheus.png\" alt=\"AmazonManagedPrometheus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.AmazonManagedPrometheus**\n\n<img width=\"30\" src=\"/img/resources/aws/management/amazon-managed-workflows-apache-airflow.png\" alt=\"AmazonManagedWorkflowsApacheAirflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.AmazonManagedWorkflowsApacheAirflow**\n\n<img width=\"30\" src=\"/img/resources/aws/management/auto-scaling.png\" alt=\"AutoScaling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.AutoScaling**\n\n<img width=\"30\" src=\"/img/resources/aws/management/chatbot.png\" alt=\"Chatbot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Chatbot**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudformation-change-set.png\" alt=\"CloudformationChangeSet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudformationChangeSet**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudformation-stack.png\" alt=\"CloudformationStack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudformationStack**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudformation-template.png\" alt=\"CloudformationTemplate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudformationTemplate**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudformation.png\" alt=\"Cloudformation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Cloudformation**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudtrail.png\" alt=\"Cloudtrail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Cloudtrail**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch-alarm.png\" alt=\"CloudwatchAlarm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudwatchAlarm**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch-event-event-based.png\" alt=\"CloudwatchEventEventBased\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudwatchEventEventBased**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch-event-time-based.png\" alt=\"CloudwatchEventTimeBased\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudwatchEventTimeBased**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch-logs.png\" alt=\"CloudwatchLogs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudwatchLogs**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch-rule.png\" alt=\"CloudwatchRule\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CloudwatchRule**\n\n<img width=\"30\" src=\"/img/resources/aws/management/cloudwatch.png\" alt=\"Cloudwatch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Cloudwatch**\n\n<img width=\"30\" src=\"/img/resources/aws/management/codeguru.png\" alt=\"Codeguru\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Codeguru**\n\n<img width=\"30\" src=\"/img/resources/aws/management/command-line-interface.png\" alt=\"CommandLineInterface\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.CommandLineInterface**\n\n<img width=\"30\" src=\"/img/resources/aws/management/config.png\" alt=\"Config\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Config**\n\n<img width=\"30\" src=\"/img/resources/aws/management/control-tower.png\" alt=\"ControlTower\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.ControlTower**\n\n<img width=\"30\" src=\"/img/resources/aws/management/license-manager.png\" alt=\"LicenseManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.LicenseManager**\n\n<img width=\"30\" src=\"/img/resources/aws/management/managed-services.png\" alt=\"ManagedServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.ManagedServices**\n\n<img width=\"30\" src=\"/img/resources/aws/management/management-and-governance.png\" alt=\"ManagementAndGovernance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.ManagementAndGovernance**\n\n<img width=\"30\" src=\"/img/resources/aws/management/management-console.png\" alt=\"ManagementConsole\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.ManagementConsole**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-apps.png\" alt=\"OpsworksApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksApps**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-deployments.png\" alt=\"OpsworksDeployments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksDeployments**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-instances.png\" alt=\"OpsworksInstances\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksInstances**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-layers.png\" alt=\"OpsworksLayers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksLayers**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-monitoring.png\" alt=\"OpsworksMonitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksMonitoring**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-permissions.png\" alt=\"OpsworksPermissions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksPermissions**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-resources.png\" alt=\"OpsworksResources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksResources**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks-stack.png\" alt=\"OpsworksStack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OpsworksStack**\n\n<img width=\"30\" src=\"/img/resources/aws/management/opsworks.png\" alt=\"Opsworks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Opsworks**\n\n<img width=\"30\" src=\"/img/resources/aws/management/organizations-account.png\" alt=\"OrganizationsAccount\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OrganizationsAccount**\n\n<img width=\"30\" src=\"/img/resources/aws/management/organizations-organizational-unit.png\" alt=\"OrganizationsOrganizationalUnit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.OrganizationsOrganizationalUnit**\n\n<img width=\"30\" src=\"/img/resources/aws/management/organizations.png\" alt=\"Organizations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Organizations**\n\n<img width=\"30\" src=\"/img/resources/aws/management/personal-health-dashboard.png\" alt=\"PersonalHealthDashboard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.PersonalHealthDashboard**\n\n<img width=\"30\" src=\"/img/resources/aws/management/proton.png\" alt=\"Proton\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.Proton**\n\n<img width=\"30\" src=\"/img/resources/aws/management/service-catalog.png\" alt=\"ServiceCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.ServiceCatalog**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-app-config.png\" alt=\"SystemsManagerAppConfig\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerAppConfig**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-automation.png\" alt=\"SystemsManagerAutomation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerAutomation**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-documents.png\" alt=\"SystemsManagerDocuments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerDocuments**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-inventory.png\" alt=\"SystemsManagerInventory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerInventory**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-maintenance-windows.png\" alt=\"SystemsManagerMaintenanceWindows\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerMaintenanceWindows**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-opscenter.png\" alt=\"SystemsManagerOpscenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerOpscenter**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-parameter-store.png\" alt=\"SystemsManagerParameterStore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerParameterStore**, **ParameterStore** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-patch-manager.png\" alt=\"SystemsManagerPatchManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerPatchManager**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-run-command.png\" alt=\"SystemsManagerRunCommand\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerRunCommand**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager-state-manager.png\" alt=\"SystemsManagerStateManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManagerStateManager**\n\n<img width=\"30\" src=\"/img/resources/aws/management/systems-manager.png\" alt=\"SystemsManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.SystemsManager**, **SSM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor-checklist-cost.png\" alt=\"TrustedAdvisorChecklistCost\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisorChecklistCost**\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor-checklist-fault-tolerant.png\" alt=\"TrustedAdvisorChecklistFaultTolerant\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisorChecklistFaultTolerant**\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor-checklist-performance.png\" alt=\"TrustedAdvisorChecklistPerformance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisorChecklistPerformance**\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor-checklist-security.png\" alt=\"TrustedAdvisorChecklistSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisorChecklistSecurity**\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor-checklist.png\" alt=\"TrustedAdvisorChecklist\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisorChecklist**\n\n<img width=\"30\" src=\"/img/resources/aws/management/trusted-advisor.png\" alt=\"TrustedAdvisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.TrustedAdvisor**\n\n<img width=\"30\" src=\"/img/resources/aws/management/user-notifications.png\" alt=\"UserNotifications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.UserNotifications**\n\n<img width=\"30\" src=\"/img/resources/aws/management/well-architected-tool.png\" alt=\"WellArchitectedTool\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.management.WellArchitectedTool**\n\n## aws.media\n\n\n<img width=\"30\" src=\"/img/resources/aws/media/elastic-transcoder.png\" alt=\"ElasticTranscoder\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElasticTranscoder**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-conductor.png\" alt=\"ElementalConductor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalConductor**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-delta.png\" alt=\"ElementalDelta\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalDelta**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-live.png\" alt=\"ElementalLive\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalLive**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-mediaconnect.png\" alt=\"ElementalMediaconnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMediaconnect**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-mediaconvert.png\" alt=\"ElementalMediaconvert\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMediaconvert**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-medialive.png\" alt=\"ElementalMedialive\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMedialive**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-mediapackage.png\" alt=\"ElementalMediapackage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMediapackage**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-mediastore.png\" alt=\"ElementalMediastore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMediastore**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-mediatailor.png\" alt=\"ElementalMediatailor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalMediatailor**\n\n<img width=\"30\" src=\"/img/resources/aws/media/elemental-server.png\" alt=\"ElementalServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.ElementalServer**\n\n<img width=\"30\" src=\"/img/resources/aws/media/kinesis-video-streams.png\" alt=\"KinesisVideoStreams\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.KinesisVideoStreams**\n\n<img width=\"30\" src=\"/img/resources/aws/media/media-services.png\" alt=\"MediaServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.media.MediaServices**\n\n## aws.migration\n\n\n<img width=\"30\" src=\"/img/resources/aws/migration/application-discovery-service.png\" alt=\"ApplicationDiscoveryService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.ApplicationDiscoveryService**, **ADS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/migration/cloudendure-migration.png\" alt=\"CloudendureMigration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.CloudendureMigration**, **CEM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/migration/database-migration-service.png\" alt=\"DatabaseMigrationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.DatabaseMigrationService**, **DMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/migration/datasync-agent.png\" alt=\"DatasyncAgent\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.DatasyncAgent**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/datasync.png\" alt=\"Datasync\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.Datasync**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/migration-and-transfer.png\" alt=\"MigrationAndTransfer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.MigrationAndTransfer**, **MAT** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/migration/migration-hub.png\" alt=\"MigrationHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.MigrationHub**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/server-migration-service.png\" alt=\"ServerMigrationService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.ServerMigrationService**, **SMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/migration/snowball-edge.png\" alt=\"SnowballEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.SnowballEdge**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/snowball.png\" alt=\"Snowball\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.Snowball**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/snowmobile.png\" alt=\"Snowmobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.Snowmobile**\n\n<img width=\"30\" src=\"/img/resources/aws/migration/transfer-for-sftp.png\" alt=\"TransferForSftp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.migration.TransferForSftp**\n\n## aws.ml\n\n\n<img width=\"30\" src=\"/img/resources/aws/ml/apache-mxnet-on-aws.png\" alt=\"ApacheMxnetOnAWS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.ApacheMxnetOnAWS**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/augmented-ai.png\" alt=\"AugmentedAi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.AugmentedAi**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/bedrock.png\" alt=\"Bedrock\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Bedrock**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/comprehend.png\" alt=\"Comprehend\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Comprehend**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/deep-learning-amis.png\" alt=\"DeepLearningAmis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.DeepLearningAmis**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/deep-learning-containers.png\" alt=\"DeepLearningContainers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.DeepLearningContainers**, **DLC** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/ml/deepcomposer.png\" alt=\"Deepcomposer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Deepcomposer**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/deeplens.png\" alt=\"Deeplens\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Deeplens**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/deepracer.png\" alt=\"Deepracer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Deepracer**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/elastic-inference.png\" alt=\"ElasticInference\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.ElasticInference**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/forecast.png\" alt=\"Forecast\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Forecast**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/fraud-detector.png\" alt=\"FraudDetector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.FraudDetector**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/kendra.png\" alt=\"Kendra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Kendra**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/lex.png\" alt=\"Lex\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Lex**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/machine-learning.png\" alt=\"MachineLearning\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.MachineLearning**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/personalize.png\" alt=\"Personalize\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Personalize**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/polly.png\" alt=\"Polly\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Polly**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/q.png\" alt=\"Q\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Q**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/rekognition-image.png\" alt=\"RekognitionImage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.RekognitionImage**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/rekognition-video.png\" alt=\"RekognitionVideo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.RekognitionVideo**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/rekognition.png\" alt=\"Rekognition\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Rekognition**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/sagemaker-ground-truth.png\" alt=\"SagemakerGroundTruth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.SagemakerGroundTruth**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/sagemaker-model.png\" alt=\"SagemakerModel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.SagemakerModel**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/sagemaker-notebook.png\" alt=\"SagemakerNotebook\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.SagemakerNotebook**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/sagemaker-training-job.png\" alt=\"SagemakerTrainingJob\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.SagemakerTrainingJob**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/sagemaker.png\" alt=\"Sagemaker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Sagemaker**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/tensorflow-on-aws.png\" alt=\"TensorflowOnAWS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.TensorflowOnAWS**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/textract.png\" alt=\"Textract\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Textract**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/transcribe.png\" alt=\"Transcribe\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Transcribe**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/transform.png\" alt=\"Transform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Transform**\n\n<img width=\"30\" src=\"/img/resources/aws/ml/translate.png\" alt=\"Translate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.ml.Translate**\n\n## aws.mobile\n\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/amplify.png\" alt=\"Amplify\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.Amplify**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/api-gateway-endpoint.png\" alt=\"APIGatewayEndpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.APIGatewayEndpoint**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/api-gateway.png\" alt=\"APIGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.APIGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/appsync.png\" alt=\"Appsync\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.Appsync**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/device-farm.png\" alt=\"DeviceFarm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.DeviceFarm**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/mobile.png\" alt=\"Mobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.Mobile**\n\n<img width=\"30\" src=\"/img/resources/aws/mobile/pinpoint.png\" alt=\"Pinpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.mobile.Pinpoint**\n\n## aws.network\n\n\n<img width=\"30\" src=\"/img/resources/aws/network/api-gateway-endpoint.png\" alt=\"APIGatewayEndpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.APIGatewayEndpoint**\n\n<img width=\"30\" src=\"/img/resources/aws/network/api-gateway.png\" alt=\"APIGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.APIGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/network/app-mesh.png\" alt=\"AppMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.AppMesh**\n\n<img width=\"30\" src=\"/img/resources/aws/network/client-vpn.png\" alt=\"ClientVpn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.ClientVpn**\n\n<img width=\"30\" src=\"/img/resources/aws/network/cloud-map.png\" alt=\"CloudMap\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.CloudMap**\n\n<img width=\"30\" src=\"/img/resources/aws/network/cloudfront-download-distribution.png\" alt=\"CloudFrontDownloadDistribution\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.CloudFrontDownloadDistribution**\n\n<img width=\"30\" src=\"/img/resources/aws/network/cloudfront-edge-location.png\" alt=\"CloudFrontEdgeLocation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.CloudFrontEdgeLocation**\n\n<img width=\"30\" src=\"/img/resources/aws/network/cloudfront-streaming-distribution.png\" alt=\"CloudFrontStreamingDistribution\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.CloudFrontStreamingDistribution**\n\n<img width=\"30\" src=\"/img/resources/aws/network/cloudfront.png\" alt=\"CloudFront\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.CloudFront**, **CF** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/direct-connect.png\" alt=\"DirectConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.DirectConnect**\n\n<img width=\"30\" src=\"/img/resources/aws/network/elastic-load-balancing.png\" alt=\"ElasticLoadBalancing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.ElasticLoadBalancing**, **ELB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/elb-application-load-balancer.png\" alt=\"ElbApplicationLoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.ElbApplicationLoadBalancer**, **ALB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/elb-classic-load-balancer.png\" alt=\"ElbClassicLoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.ElbClassicLoadBalancer**, **CLB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/elb-network-load-balancer.png\" alt=\"ElbNetworkLoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.ElbNetworkLoadBalancer**, **NLB** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/endpoint.png\" alt=\"Endpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.Endpoint**\n\n<img width=\"30\" src=\"/img/resources/aws/network/global-accelerator.png\" alt=\"GlobalAccelerator\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.GlobalAccelerator**, **GAX** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/internet-gateway.png\" alt=\"InternetGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.InternetGateway**, **IGW** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/nacl.png\" alt=\"Nacl\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.Nacl**\n\n<img width=\"30\" src=\"/img/resources/aws/network/nat-gateway.png\" alt=\"NATGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.NATGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/network/network-firewall.png\" alt=\"NetworkFirewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.NetworkFirewall**\n\n<img width=\"30\" src=\"/img/resources/aws/network/networking-and-content-delivery.png\" alt=\"NetworkingAndContentDelivery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.NetworkingAndContentDelivery**\n\n<img width=\"30\" src=\"/img/resources/aws/network/private-subnet.png\" alt=\"PrivateSubnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.PrivateSubnet**\n\n<img width=\"30\" src=\"/img/resources/aws/network/privatelink.png\" alt=\"Privatelink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.Privatelink**\n\n<img width=\"30\" src=\"/img/resources/aws/network/public-subnet.png\" alt=\"PublicSubnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.PublicSubnet**\n\n<img width=\"30\" src=\"/img/resources/aws/network/route-53-hosted-zone.png\" alt=\"Route53HostedZone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.Route53HostedZone**\n\n<img width=\"30\" src=\"/img/resources/aws/network/route-53.png\" alt=\"Route53\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.Route53**\n\n<img width=\"30\" src=\"/img/resources/aws/network/route-table.png\" alt=\"RouteTable\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.RouteTable**\n\n<img width=\"30\" src=\"/img/resources/aws/network/site-to-site-vpn.png\" alt=\"SiteToSiteVpn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.SiteToSiteVpn**\n\n<img width=\"30\" src=\"/img/resources/aws/network/transit-gateway-attachment.png\" alt=\"TransitGatewayAttachment\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.TransitGatewayAttachment**, **TGWAttach** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/transit-gateway.png\" alt=\"TransitGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.TransitGateway**, **TGW** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-customer-gateway.png\" alt=\"VPCCustomerGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCCustomerGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-elastic-network-adapter.png\" alt=\"VPCElasticNetworkAdapter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCElasticNetworkAdapter**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-elastic-network-interface.png\" alt=\"VPCElasticNetworkInterface\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCElasticNetworkInterface**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-flow-logs.png\" alt=\"VPCFlowLogs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCFlowLogs**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-peering.png\" alt=\"VPCPeering\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCPeering**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-router.png\" alt=\"VPCRouter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCRouter**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc-traffic-mirroring.png\" alt=\"VPCTrafficMirroring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPCTrafficMirroring**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpc.png\" alt=\"VPC\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VPC**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpn-connection.png\" alt=\"VpnConnection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VpnConnection**\n\n<img width=\"30\" src=\"/img/resources/aws/network/vpn-gateway.png\" alt=\"VpnGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.network.VpnGateway**\n\n## aws.quantum\n\n\n<img width=\"30\" src=\"/img/resources/aws/quantum/braket.png\" alt=\"Braket\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.quantum.Braket**\n\n<img width=\"30\" src=\"/img/resources/aws/quantum/quantum-technologies.png\" alt=\"QuantumTechnologies\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.quantum.QuantumTechnologies**\n\n## aws.robotics\n\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robomaker-cloud-extension-ros.png\" alt=\"RobomakerCloudExtensionRos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.RobomakerCloudExtensionRos**\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robomaker-development-environment.png\" alt=\"RobomakerDevelopmentEnvironment\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.RobomakerDevelopmentEnvironment**\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robomaker-fleet-management.png\" alt=\"RobomakerFleetManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.RobomakerFleetManagement**\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robomaker-simulator.png\" alt=\"RobomakerSimulator\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.RobomakerSimulator**\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robomaker.png\" alt=\"Robomaker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.Robomaker**\n\n<img width=\"30\" src=\"/img/resources/aws/robotics/robotics.png\" alt=\"Robotics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.robotics.Robotics**\n\n## aws.satellite\n\n\n<img width=\"30\" src=\"/img/resources/aws/satellite/ground-station.png\" alt=\"GroundStation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.satellite.GroundStation**\n\n<img width=\"30\" src=\"/img/resources/aws/satellite/satellite.png\" alt=\"Satellite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.satellite.Satellite**\n\n## aws.security\n\n\n<img width=\"30\" src=\"/img/resources/aws/security/ad-connector.png\" alt=\"AdConnector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.AdConnector**\n\n<img width=\"30\" src=\"/img/resources/aws/security/artifact.png\" alt=\"Artifact\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Artifact**\n\n<img width=\"30\" src=\"/img/resources/aws/security/certificate-authority.png\" alt=\"CertificateAuthority\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.CertificateAuthority**\n\n<img width=\"30\" src=\"/img/resources/aws/security/certificate-manager.png\" alt=\"CertificateManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.CertificateManager**, **ACM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/cloud-directory.png\" alt=\"CloudDirectory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.CloudDirectory**\n\n<img width=\"30\" src=\"/img/resources/aws/security/cloudhsm.png\" alt=\"Cloudhsm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Cloudhsm**, **CloudHSM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/cognito.png\" alt=\"Cognito\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Cognito**\n\n<img width=\"30\" src=\"/img/resources/aws/security/detective.png\" alt=\"Detective\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Detective**\n\n<img width=\"30\" src=\"/img/resources/aws/security/directory-service.png\" alt=\"DirectoryService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.DirectoryService**, **DS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/firewall-manager.png\" alt=\"FirewallManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.FirewallManager**, **FMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/guardduty.png\" alt=\"Guardduty\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Guardduty**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-access-analyzer.png\" alt=\"IdentityAndAccessManagementIamAccessAnalyzer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamAccessAnalyzer**, **IAMAccessAnalyzer** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-add-on.png\" alt=\"IdentityAndAccessManagementIamAddOn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamAddOn**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-aws-sts-alternate.png\" alt=\"IdentityAndAccessManagementIamAWSStsAlternate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamAWSStsAlternate**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-aws-sts.png\" alt=\"IdentityAndAccessManagementIamAWSSts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamAWSSts**, **IAMAWSSts** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-data-encryption-key.png\" alt=\"IdentityAndAccessManagementIamDataEncryptionKey\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamDataEncryptionKey**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-encrypted-data.png\" alt=\"IdentityAndAccessManagementIamEncryptedData\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamEncryptedData**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-long-term-security-credential.png\" alt=\"IdentityAndAccessManagementIamLongTermSecurityCredential\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamLongTermSecurityCredential**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-mfa-token.png\" alt=\"IdentityAndAccessManagementIamMfaToken\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamMfaToken**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-permissions.png\" alt=\"IdentityAndAccessManagementIamPermissions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamPermissions**, **IAMPermissions** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-role.png\" alt=\"IdentityAndAccessManagementIamRole\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamRole**, **IAMRole** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam-temporary-security-credential.png\" alt=\"IdentityAndAccessManagementIamTemporarySecurityCredential\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIamTemporarySecurityCredential**\n\n<img width=\"30\" src=\"/img/resources/aws/security/identity-and-access-management-iam.png\" alt=\"IdentityAndAccessManagementIam\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.IdentityAndAccessManagementIam**, **IAM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/inspector-agent.png\" alt=\"InspectorAgent\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.InspectorAgent**\n\n<img width=\"30\" src=\"/img/resources/aws/security/inspector.png\" alt=\"Inspector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Inspector**\n\n<img width=\"30\" src=\"/img/resources/aws/security/key-management-service.png\" alt=\"KeyManagementService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.KeyManagementService**, **KMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/macie.png\" alt=\"Macie\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Macie**\n\n<img width=\"30\" src=\"/img/resources/aws/security/managed-microsoft-ad.png\" alt=\"ManagedMicrosoftAd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.ManagedMicrosoftAd**\n\n<img width=\"30\" src=\"/img/resources/aws/security/resource-access-manager.png\" alt=\"ResourceAccessManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.ResourceAccessManager**, **RAM** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/security/secrets-manager.png\" alt=\"SecretsManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SecretsManager**\n\n<img width=\"30\" src=\"/img/resources/aws/security/security-hub-finding.png\" alt=\"SecurityHubFinding\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SecurityHubFinding**\n\n<img width=\"30\" src=\"/img/resources/aws/security/security-hub.png\" alt=\"SecurityHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SecurityHub**\n\n<img width=\"30\" src=\"/img/resources/aws/security/security-identity-and-compliance.png\" alt=\"SecurityIdentityAndCompliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SecurityIdentityAndCompliance**\n\n<img width=\"30\" src=\"/img/resources/aws/security/security-lake.png\" alt=\"SecurityLake\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SecurityLake**\n\n<img width=\"30\" src=\"/img/resources/aws/security/shield-advanced.png\" alt=\"ShieldAdvanced\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.ShieldAdvanced**\n\n<img width=\"30\" src=\"/img/resources/aws/security/shield.png\" alt=\"Shield\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.Shield**\n\n<img width=\"30\" src=\"/img/resources/aws/security/simple-ad.png\" alt=\"SimpleAd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SimpleAd**\n\n<img width=\"30\" src=\"/img/resources/aws/security/single-sign-on.png\" alt=\"SingleSignOn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.SingleSignOn**\n\n<img width=\"30\" src=\"/img/resources/aws/security/waf-filtering-rule.png\" alt=\"WAFFilteringRule\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.WAFFilteringRule**\n\n<img width=\"30\" src=\"/img/resources/aws/security/waf.png\" alt=\"WAF\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.security.WAF**\n\n## aws.storage\n\n\n<img width=\"30\" src=\"/img/resources/aws/storage/backup.png\" alt=\"Backup\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.Backup**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/cloudendure-disaster-recovery.png\" alt=\"CloudendureDisasterRecovery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.CloudendureDisasterRecovery**, **CDR** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/storage/efs-infrequentaccess-primary-bg.png\" alt=\"EFSInfrequentaccessPrimaryBg\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.EFSInfrequentaccessPrimaryBg**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/efs-standard-primary-bg.png\" alt=\"EFSStandardPrimaryBg\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.EFSStandardPrimaryBg**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/elastic-block-store-ebs-snapshot.png\" alt=\"ElasticBlockStoreEBSSnapshot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.ElasticBlockStoreEBSSnapshot**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/elastic-block-store-ebs-volume.png\" alt=\"ElasticBlockStoreEBSVolume\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.ElasticBlockStoreEBSVolume**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/elastic-block-store-ebs.png\" alt=\"ElasticBlockStoreEBS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.ElasticBlockStoreEBS**, **EBS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/storage/elastic-file-system-efs-file-system.png\" alt=\"ElasticFileSystemEFSFileSystem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.ElasticFileSystemEFSFileSystem**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/elastic-file-system-efs.png\" alt=\"ElasticFileSystemEFS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.ElasticFileSystemEFS**, **EFS** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/storage/fsx-for-lustre.png\" alt=\"FsxForLustre\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.FsxForLustre**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/fsx-for-windows-file-server.png\" alt=\"FsxForWindowsFileServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.FsxForWindowsFileServer**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/fsx.png\" alt=\"Fsx\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.Fsx**, **FSx** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/storage/multiple-volumes-resource.png\" alt=\"MultipleVolumesResource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.MultipleVolumesResource**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/s3-access-points.png\" alt=\"S3AccessPoints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.S3AccessPoints**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/s3-glacier-archive.png\" alt=\"S3GlacierArchive\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.S3GlacierArchive**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/s3-glacier-vault.png\" alt=\"S3GlacierVault\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.S3GlacierVault**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/s3-glacier.png\" alt=\"S3Glacier\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.S3Glacier**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/s3-object-lambda-access-points.png\" alt=\"S3ObjectLambdaAccessPoints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.S3ObjectLambdaAccessPoints**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/simple-storage-service-s3-bucket-with-objects.png\" alt=\"SimpleStorageServiceS3BucketWithObjects\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SimpleStorageServiceS3BucketWithObjects**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/simple-storage-service-s3-bucket.png\" alt=\"SimpleStorageServiceS3Bucket\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SimpleStorageServiceS3Bucket**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/simple-storage-service-s3-object.png\" alt=\"SimpleStorageServiceS3Object\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SimpleStorageServiceS3Object**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/simple-storage-service-s3.png\" alt=\"SimpleStorageServiceS3\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SimpleStorageServiceS3**, **S3** (alias)\n\n<img width=\"30\" src=\"/img/resources/aws/storage/snow-family-snowball-import-export.png\" alt=\"SnowFamilySnowballImportExport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SnowFamilySnowballImportExport**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/snowball-edge.png\" alt=\"SnowballEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.SnowballEdge**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/snowball.png\" alt=\"Snowball\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.Snowball**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/snowmobile.png\" alt=\"Snowmobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.Snowmobile**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/storage-gateway-cached-volume.png\" alt=\"StorageGatewayCachedVolume\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.StorageGatewayCachedVolume**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/storage-gateway-non-cached-volume.png\" alt=\"StorageGatewayNonCachedVolume\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.StorageGatewayNonCachedVolume**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/storage-gateway-virtual-tape-library.png\" alt=\"StorageGatewayVirtualTapeLibrary\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.StorageGatewayVirtualTapeLibrary**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/storage-gateway.png\" alt=\"StorageGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.StorageGateway**\n\n<img width=\"30\" src=\"/img/resources/aws/storage/storage.png\" alt=\"Storage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.aws.storage.Storage**\n"
  },
  {
    "path": "docs/nodes/azure.md",
    "content": "---\nid: azure\ntitle: Azure\n---\n\nNode classes list of azure provider.\n\n## azure.aimachinelearning\n\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/ai-studio.png\" alt=\"AIStudio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AIStudio**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/anomaly-detector.png\" alt=\"AnomalyDetector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AnomalyDetector**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/azure-applied-ai-services.png\" alt=\"AzureAppliedAIServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AzureAppliedAIServices**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/azure-experimentation-studio.png\" alt=\"AzureExperimentationStudio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AzureExperimentationStudio**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/azure-object-understanding.png\" alt=\"AzureObjectUnderstanding\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AzureObjectUnderstanding**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/azure-openai.png\" alt=\"AzureOpenai\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.AzureOpenai**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/batch-ai.png\" alt=\"BatchAI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.BatchAI**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/bonsai.png\" alt=\"Bonsai\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.Bonsai**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/bot-services.png\" alt=\"BotServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.BotServices**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/cognitive-search.png\" alt=\"CognitiveSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.CognitiveSearch**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/cognitive-services-decisions.png\" alt=\"CognitiveServicesDecisions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.CognitiveServicesDecisions**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/cognitive-services.png\" alt=\"CognitiveServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.CognitiveServices**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/computer-vision.png\" alt=\"ComputerVision\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.ComputerVision**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/content-moderators.png\" alt=\"ContentModerators\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.ContentModerators**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/custom-vision.png\" alt=\"CustomVision\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.CustomVision**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/face-apis.png\" alt=\"FaceApis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.FaceApis**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/form-recognizers.png\" alt=\"FormRecognizers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.FormRecognizers**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/genomics-accounts.png\" alt=\"GenomicsAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.GenomicsAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/genomics.png\" alt=\"Genomics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.Genomics**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/immersive-readers.png\" alt=\"ImmersiveReaders\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.ImmersiveReaders**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/language-understanding.png\" alt=\"LanguageUnderstanding\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.LanguageUnderstanding**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/language.png\" alt=\"Language\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.Language**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/machine-learning-studio-classic-web-services.png\" alt=\"MachineLearningStudioClassicWebServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.MachineLearningStudioClassicWebServices**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/machine-learning-studio-web-service-plans.png\" alt=\"MachineLearningStudioWebServicePlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.MachineLearningStudioWebServicePlans**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/machine-learning-studio-workspaces.png\" alt=\"MachineLearningStudioWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.MachineLearningStudioWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/machine-learning.png\" alt=\"MachineLearning\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.MachineLearning**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/metrics-advisor.png\" alt=\"MetricsAdvisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.MetricsAdvisor**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/personalizers.png\" alt=\"Personalizers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.Personalizers**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/qna-makers.png\" alt=\"QnaMakers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.QnaMakers**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/serverless-search.png\" alt=\"ServerlessSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.ServerlessSearch**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/speech-services.png\" alt=\"SpeechServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.SpeechServices**\n\n<img width=\"30\" src=\"/img/resources/azure/aimachinelearning/translator-text.png\" alt=\"TranslatorText\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.aimachinelearning.TranslatorText**\n\n## azure.analytics\n\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/analysis-services.png\" alt=\"AnalysisServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.AnalysisServices**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/azure-data-explorer-clusters.png\" alt=\"AzureDataExplorerClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.AzureDataExplorerClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/azure-databricks.png\" alt=\"AzureDatabricks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.AzureDatabricks**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/azure-synapse-analytics.png\" alt=\"AzureSynapseAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.AzureSynapseAnalytics**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/azure-workbooks.png\" alt=\"AzureWorkbooks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.AzureWorkbooks**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/data-explorer-clusters.png\" alt=\"DataExplorerClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.DataExplorerClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/data-factories.png\" alt=\"DataFactories\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.DataFactories**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/data-lake-analytics.png\" alt=\"DataLakeAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.DataLakeAnalytics**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/data-lake-store-gen1.png\" alt=\"DataLakeStoreGen1\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.DataLakeStoreGen1**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/databricks.png\" alt=\"Databricks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.Databricks**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/endpoint-analytics.png\" alt=\"EndpointAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.EndpointAnalytics**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/event-hub-clusters.png\" alt=\"EventHubClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.EventHubClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/event-hubs.png\" alt=\"EventHubs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.EventHubs**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/hd-insight-clusters.png\" alt=\"HDInsightClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.HDInsightClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/log-analytics-workspaces.png\" alt=\"LogAnalyticsWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.LogAnalyticsWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/power-bi-embedded.png\" alt=\"PowerBiEmbedded\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.PowerBiEmbedded**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/power-platform.png\" alt=\"PowerPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.PowerPlatform**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/private-link-services.png\" alt=\"PrivateLinkServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.PrivateLinkServices**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/stream-analytics-jobs.png\" alt=\"StreamAnalyticsJobs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.StreamAnalyticsJobs**\n\n<img width=\"30\" src=\"/img/resources/azure/analytics/synapse-analytics.png\" alt=\"SynapseAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.analytics.SynapseAnalytics**\n\n## azure.appservices\n\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/app-service-certificates.png\" alt=\"AppServiceCertificates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.AppServiceCertificates**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/app-service-domains.png\" alt=\"AppServiceDomains\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.AppServiceDomains**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/app-service-environments.png\" alt=\"AppServiceEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.AppServiceEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/app-service-plans.png\" alt=\"AppServicePlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.AppServicePlans**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/app-services.png\" alt=\"AppServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.AppServices**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/cdn-profiles.png\" alt=\"CDNProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.CDNProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/cognitive-search.png\" alt=\"CognitiveSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.CognitiveSearch**\n\n<img width=\"30\" src=\"/img/resources/azure/appservices/notification-hubs.png\" alt=\"NotificationHubs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.appservices.NotificationHubs**\n\n## azure.azureecosystem\n\n\n<img width=\"30\" src=\"/img/resources/azure/azureecosystem/applens.png\" alt=\"Applens\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azureecosystem.Applens**\n\n<img width=\"30\" src=\"/img/resources/azure/azureecosystem/azure-hybrid-center.png\" alt=\"AzureHybridCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azureecosystem.AzureHybridCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/azureecosystem/collaborative-service.png\" alt=\"CollaborativeService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azureecosystem.CollaborativeService**\n\n## azure.azurestack\n\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/capacity.png\" alt=\"Capacity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.Capacity**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/infrastructure-backup.png\" alt=\"InfrastructureBackup\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.InfrastructureBackup**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/multi-tenancy.png\" alt=\"MultiTenancy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.MultiTenancy**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/offers.png\" alt=\"Offers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.Offers**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/plans.png\" alt=\"Plans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.Plans**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/updates.png\" alt=\"Updates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.Updates**\n\n<img width=\"30\" src=\"/img/resources/azure/azurestack/user-subscriptions.png\" alt=\"UserSubscriptions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.azurestack.UserSubscriptions**\n\n## azure.blockchain\n\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/abs-member.png\" alt=\"AbsMember\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.AbsMember**\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/azure-blockchain-service.png\" alt=\"AzureBlockchainService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.AzureBlockchainService**\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/azure-token-service.png\" alt=\"AzureTokenService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.AzureTokenService**\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/blockchain-applications.png\" alt=\"BlockchainApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.BlockchainApplications**\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/consortium.png\" alt=\"Consortium\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.Consortium**\n\n<img width=\"30\" src=\"/img/resources/azure/blockchain/outbound-connection.png\" alt=\"OutboundConnection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.blockchain.OutboundConnection**\n\n## azure.compute\n\n\n<img width=\"30\" src=\"/img/resources/azure/compute/app-services.png\" alt=\"AppServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.AppServices**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/application-group.png\" alt=\"ApplicationGroup\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ApplicationGroup**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/automanaged-vm.png\" alt=\"AutomanagedVM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.AutomanagedVM**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/availability-sets.png\" alt=\"AvailabilitySets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.AvailabilitySets**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/azure-compute-galleries.png\" alt=\"AzureComputeGalleries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.AzureComputeGalleries**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/azure-spring-apps.png\" alt=\"AzureSpringApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.AzureSpringApps**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/batch-accounts.png\" alt=\"BatchAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.BatchAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/citrix-virtual-desktops-essentials.png\" alt=\"CitrixVirtualDesktopsEssentials\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.CitrixVirtualDesktopsEssentials**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/cloud-services-classic.png\" alt=\"CloudServicesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.CloudServicesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/cloud-services.png\" alt=\"CloudServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.CloudServices**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/cloudsimple-virtual-machines.png\" alt=\"CloudsimpleVirtualMachines\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.CloudsimpleVirtualMachines**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/container-apps.png\" alt=\"ContainerApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ContainerApps**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/container-instances.png\" alt=\"ContainerInstances\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ContainerInstances**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/container-registries.png\" alt=\"ContainerRegistries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ContainerRegistries**, **ACR** (alias)\n\n<img width=\"30\" src=\"/img/resources/azure/compute/container-services-deprecated.png\" alt=\"ContainerServicesDeprecated\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ContainerServicesDeprecated**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/disk-encryption-sets.png\" alt=\"DiskEncryptionSets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.DiskEncryptionSets**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/disk-snapshots.png\" alt=\"DiskSnapshots\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.DiskSnapshots**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/disks-classic.png\" alt=\"DisksClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.DisksClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/disks-snapshots.png\" alt=\"DisksSnapshots\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.DisksSnapshots**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/disks.png\" alt=\"Disks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.Disks**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/function-apps.png\" alt=\"FunctionApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.FunctionApps**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/host-groups.png\" alt=\"HostGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.HostGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/host-pools.png\" alt=\"HostPools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.HostPools**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/hosts.png\" alt=\"Hosts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.Hosts**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/image-definitions.png\" alt=\"ImageDefinitions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ImageDefinitions**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/image-templates.png\" alt=\"ImageTemplates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ImageTemplates**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/image-versions.png\" alt=\"ImageVersions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ImageVersions**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/images.png\" alt=\"Images\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.Images**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/kubernetes-services.png\" alt=\"KubernetesServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.KubernetesServices**, **AKS** (alias)\n\n<img width=\"30\" src=\"/img/resources/azure/compute/maintenance-configuration.png\" alt=\"MaintenanceConfiguration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.MaintenanceConfiguration**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/managed-service-fabric.png\" alt=\"ManagedServiceFabric\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ManagedServiceFabric**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/mesh-applications.png\" alt=\"MeshApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.MeshApplications**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/metrics-advisor.png\" alt=\"MetricsAdvisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.MetricsAdvisor**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/os-images-classic.png\" alt=\"OsImagesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.OsImagesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/os-images.png\" alt=\"OsImages\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.OsImages**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/restore-points-collections.png\" alt=\"RestorePointsCollections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.RestorePointsCollections**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/restore-points.png\" alt=\"RestorePoints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.RestorePoints**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/sap-hana-on-azure.png\" alt=\"SAPHANAOnAzure\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.SAPHANAOnAzure**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/service-fabric-clusters.png\" alt=\"ServiceFabricClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.ServiceFabricClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/shared-image-galleries.png\" alt=\"SharedImageGalleries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.SharedImageGalleries**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/spring-cloud.png\" alt=\"SpringCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.SpringCloud**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/virtual-machine.png\" alt=\"VirtualMachine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VirtualMachine**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/virtual-machines-classic.png\" alt=\"VirtualMachinesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VirtualMachinesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-classic.png\" alt=\"VMClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-images-classic.png\" alt=\"VMImagesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMImagesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-images.png\" alt=\"VMImages\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMImages**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-linux.png\" alt=\"VMLinux\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMLinux**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-scale-set.png\" alt=\"VMScaleSet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMScaleSet**, **VMSS** (alias)\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-scale-sets.png\" alt=\"VMScaleSets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMScaleSets**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm-windows.png\" alt=\"VMWindows\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VMWindows**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/vm.png\" alt=\"VM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.VM**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/workspaces-2.png\" alt=\"Workspaces2\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.Workspaces2**\n\n<img width=\"30\" src=\"/img/resources/azure/compute/workspaces.png\" alt=\"Workspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.compute.Workspaces**\n\n## azure.containers\n\n\n<img width=\"30\" src=\"/img/resources/azure/containers/app-services.png\" alt=\"AppServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.AppServices**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/azure-red-hat-openshift.png\" alt=\"AzureRedHatOpenshift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.AzureRedHatOpenshift**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/batch-accounts.png\" alt=\"BatchAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.BatchAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/container-instances.png\" alt=\"ContainerInstances\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.ContainerInstances**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/container-registries.png\" alt=\"ContainerRegistries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.ContainerRegistries**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/kubernetes-services.png\" alt=\"KubernetesServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.KubernetesServices**\n\n<img width=\"30\" src=\"/img/resources/azure/containers/service-fabric-clusters.png\" alt=\"ServiceFabricClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.containers.ServiceFabricClusters**\n\n## azure.database\n\n\n<img width=\"30\" src=\"/img/resources/azure/database/blob-storage.png\" alt=\"BlobStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.BlobStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/database/cache-for-redis.png\" alt=\"CacheForRedis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.CacheForRedis**\n\n<img width=\"30\" src=\"/img/resources/azure/database/cosmos-db.png\" alt=\"CosmosDb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.CosmosDb**\n\n<img width=\"30\" src=\"/img/resources/azure/database/data-explorer-clusters.png\" alt=\"DataExplorerClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DataExplorerClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/database/data-factory.png\" alt=\"DataFactory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DataFactory**\n\n<img width=\"30\" src=\"/img/resources/azure/database/data-lake.png\" alt=\"DataLake\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DataLake**\n\n<img width=\"30\" src=\"/img/resources/azure/database/database-for-mariadb-servers.png\" alt=\"DatabaseForMariadbServers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DatabaseForMariadbServers**\n\n<img width=\"30\" src=\"/img/resources/azure/database/database-for-mysql-servers.png\" alt=\"DatabaseForMysqlServers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DatabaseForMysqlServers**\n\n<img width=\"30\" src=\"/img/resources/azure/database/database-for-postgresql-servers.png\" alt=\"DatabaseForPostgresqlServers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.DatabaseForPostgresqlServers**\n\n<img width=\"30\" src=\"/img/resources/azure/database/elastic-database-pools.png\" alt=\"ElasticDatabasePools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.ElasticDatabasePools**\n\n<img width=\"30\" src=\"/img/resources/azure/database/elastic-job-agents.png\" alt=\"ElasticJobAgents\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.ElasticJobAgents**\n\n<img width=\"30\" src=\"/img/resources/azure/database/instance-pools.png\" alt=\"InstancePools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.InstancePools**\n\n<img width=\"30\" src=\"/img/resources/azure/database/managed-databases.png\" alt=\"ManagedDatabases\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.ManagedDatabases**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-databases.png\" alt=\"SQLDatabases\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLDatabases**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-datawarehouse.png\" alt=\"SQLDatawarehouse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLDatawarehouse**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-managed-instances.png\" alt=\"SQLManagedInstances\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLManagedInstances**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-server-stretch-databases.png\" alt=\"SQLServerStretchDatabases\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLServerStretchDatabases**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-servers.png\" alt=\"SQLServers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLServers**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql-vm.png\" alt=\"SQLVM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQLVM**\n\n<img width=\"30\" src=\"/img/resources/azure/database/sql.png\" alt=\"SQL\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SQL**\n\n<img width=\"30\" src=\"/img/resources/azure/database/ssis-lift-and-shift-ir.png\" alt=\"SsisLiftAndShiftIr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SsisLiftAndShiftIr**\n\n<img width=\"30\" src=\"/img/resources/azure/database/synapse-analytics.png\" alt=\"SynapseAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.SynapseAnalytics**\n\n<img width=\"30\" src=\"/img/resources/azure/database/virtual-clusters.png\" alt=\"VirtualClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.VirtualClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/database/virtual-datacenter.png\" alt=\"VirtualDatacenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.database.VirtualDatacenter**\n\n## azure.databases\n\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-cosmos-db.png\" alt=\"AzureCosmosDb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureCosmosDb**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-data-explorer-clusters.png\" alt=\"AzureDataExplorerClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDataExplorerClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-database-mariadb-server.png\" alt=\"AzureDatabaseMariadbServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDatabaseMariadbServer**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-database-migration-services.png\" alt=\"AzureDatabaseMigrationServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDatabaseMigrationServices**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-database-mysql-server.png\" alt=\"AzureDatabaseMysqlServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDatabaseMysqlServer**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-database-postgresql-server-group.png\" alt=\"AzureDatabasePostgresqlServerGroup\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDatabasePostgresqlServerGroup**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-database-postgresql-server.png\" alt=\"AzureDatabasePostgresqlServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureDatabasePostgresqlServer**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-purview-accounts.png\" alt=\"AzurePurviewAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzurePurviewAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-sql-edge.png\" alt=\"AzureSQLEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureSQLEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-sql-server-stretch-databases.png\" alt=\"AzureSQLServerStretchDatabases\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureSQLServerStretchDatabases**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-sql-vm.png\" alt=\"AzureSQLVM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureSQLVM**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-sql.png\" alt=\"AzureSQL\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureSQL**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/azure-synapse-analytics.png\" alt=\"AzureSynapseAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.AzureSynapseAnalytics**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/cache-redis.png\" alt=\"CacheRedis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.CacheRedis**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/data-factories.png\" alt=\"DataFactories\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.DataFactories**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/elastic-job-agents.png\" alt=\"ElasticJobAgents\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.ElasticJobAgents**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/instance-pools.png\" alt=\"InstancePools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.InstancePools**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/managed-database.png\" alt=\"ManagedDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.ManagedDatabase**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/oracle-database.png\" alt=\"OracleDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.OracleDatabase**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-data-warehouses.png\" alt=\"SQLDataWarehouses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLDataWarehouses**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-database.png\" alt=\"SQLDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLDatabase**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-elastic-pools.png\" alt=\"SQLElasticPools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLElasticPools**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-managed-instance.png\" alt=\"SQLManagedInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLManagedInstance**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-server-registries.png\" alt=\"SQLServerRegistries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLServerRegistries**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/sql-server.png\" alt=\"SQLServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SQLServer**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/ssis-lift-and-shift-ir.png\" alt=\"SsisLiftAndShiftIr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.SsisLiftAndShiftIr**\n\n<img width=\"30\" src=\"/img/resources/azure/databases/virtual-clusters.png\" alt=\"VirtualClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.databases.VirtualClusters**\n\n## azure.devops\n\n\n<img width=\"30\" src=\"/img/resources/azure/devops/api-connections.png\" alt=\"APIConnections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.APIConnections**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/api-management-services.png\" alt=\"APIManagementServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.APIManagementServices**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/application-insights.png\" alt=\"ApplicationInsights\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.ApplicationInsights**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/artifacts.png\" alt=\"Artifacts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Artifacts**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/azure-devops.png\" alt=\"AzureDevops\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.AzureDevops**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/boards.png\" alt=\"Boards\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Boards**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/change-analysis.png\" alt=\"ChangeAnalysis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.ChangeAnalysis**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/cloudtest.png\" alt=\"Cloudtest\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Cloudtest**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/code-optimization.png\" alt=\"CodeOptimization\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.CodeOptimization**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/devops-starter.png\" alt=\"DevopsStarter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.DevopsStarter**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/devops.png\" alt=\"Devops\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Devops**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/devtest-labs.png\" alt=\"DevtestLabs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.DevtestLabs**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/lab-accounts.png\" alt=\"LabAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.LabAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/lab-services.png\" alt=\"LabServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.LabServices**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/load-testing.png\" alt=\"LoadTesting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.LoadTesting**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/pipelines.png\" alt=\"Pipelines\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Pipelines**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/repos.png\" alt=\"Repos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.Repos**\n\n<img width=\"30\" src=\"/img/resources/azure/devops/test-plans.png\" alt=\"TestPlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.devops.TestPlans**\n\n## azure.general\n\n\n<img width=\"30\" src=\"/img/resources/azure/general/all-resources.png\" alt=\"AllResources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.AllResources**\n\n<img width=\"30\" src=\"/img/resources/azure/general/allresources.png\" alt=\"Allresources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Allresources**\n\n<img width=\"30\" src=\"/img/resources/azure/general/azurehome.png\" alt=\"Azurehome\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Azurehome**\n\n<img width=\"30\" src=\"/img/resources/azure/general/backlog.png\" alt=\"Backlog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Backlog**\n\n<img width=\"30\" src=\"/img/resources/azure/general/biz-talk.png\" alt=\"BizTalk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.BizTalk**\n\n<img width=\"30\" src=\"/img/resources/azure/general/blob-block.png\" alt=\"BlobBlock\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.BlobBlock**\n\n<img width=\"30\" src=\"/img/resources/azure/general/blob-page.png\" alt=\"BlobPage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.BlobPage**\n\n<img width=\"30\" src=\"/img/resources/azure/general/branch.png\" alt=\"Branch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Branch**\n\n<img width=\"30\" src=\"/img/resources/azure/general/browser.png\" alt=\"Browser\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Browser**\n\n<img width=\"30\" src=\"/img/resources/azure/general/bug.png\" alt=\"Bug\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Bug**\n\n<img width=\"30\" src=\"/img/resources/azure/general/builds.png\" alt=\"Builds\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Builds**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cache.png\" alt=\"Cache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Cache**\n\n<img width=\"30\" src=\"/img/resources/azure/general/code.png\" alt=\"Code\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Code**\n\n<img width=\"30\" src=\"/img/resources/azure/general/commit.png\" alt=\"Commit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Commit**\n\n<img width=\"30\" src=\"/img/resources/azure/general/controls-horizontal.png\" alt=\"ControlsHorizontal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ControlsHorizontal**\n\n<img width=\"30\" src=\"/img/resources/azure/general/controls.png\" alt=\"Controls\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Controls**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cost-alerts.png\" alt=\"CostAlerts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.CostAlerts**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cost-analysis.png\" alt=\"CostAnalysis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.CostAnalysis**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cost-budgets.png\" alt=\"CostBudgets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.CostBudgets**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cost-management-and-billing.png\" alt=\"CostManagementAndBilling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.CostManagementAndBilling**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cost-management.png\" alt=\"CostManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.CostManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/general/counter.png\" alt=\"Counter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Counter**\n\n<img width=\"30\" src=\"/img/resources/azure/general/cubes.png\" alt=\"Cubes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Cubes**\n\n<img width=\"30\" src=\"/img/resources/azure/general/dashboard.png\" alt=\"Dashboard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Dashboard**\n\n<img width=\"30\" src=\"/img/resources/azure/general/dev-console.png\" alt=\"DevConsole\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.DevConsole**\n\n<img width=\"30\" src=\"/img/resources/azure/general/developertools.png\" alt=\"Developertools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Developertools**\n\n<img width=\"30\" src=\"/img/resources/azure/general/download.png\" alt=\"Download\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Download**\n\n<img width=\"30\" src=\"/img/resources/azure/general/error.png\" alt=\"Error\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Error**\n\n<img width=\"30\" src=\"/img/resources/azure/general/extensions.png\" alt=\"Extensions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Extensions**\n\n<img width=\"30\" src=\"/img/resources/azure/general/feature-previews.png\" alt=\"FeaturePreviews\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.FeaturePreviews**\n\n<img width=\"30\" src=\"/img/resources/azure/general/file.png\" alt=\"File\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.File**\n\n<img width=\"30\" src=\"/img/resources/azure/general/files.png\" alt=\"Files\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Files**\n\n<img width=\"30\" src=\"/img/resources/azure/general/folder-blank.png\" alt=\"FolderBlank\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.FolderBlank**\n\n<img width=\"30\" src=\"/img/resources/azure/general/folder-website.png\" alt=\"FolderWebsite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.FolderWebsite**\n\n<img width=\"30\" src=\"/img/resources/azure/general/free-services.png\" alt=\"FreeServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.FreeServices**\n\n<img width=\"30\" src=\"/img/resources/azure/general/ftp.png\" alt=\"Ftp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Ftp**\n\n<img width=\"30\" src=\"/img/resources/azure/general/gear.png\" alt=\"Gear\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Gear**\n\n<img width=\"30\" src=\"/img/resources/azure/general/globe-error.png\" alt=\"GlobeError\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.GlobeError**\n\n<img width=\"30\" src=\"/img/resources/azure/general/globe-success.png\" alt=\"GlobeSuccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.GlobeSuccess**\n\n<img width=\"30\" src=\"/img/resources/azure/general/globe-warning.png\" alt=\"GlobeWarning\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.GlobeWarning**\n\n<img width=\"30\" src=\"/img/resources/azure/general/guide.png\" alt=\"Guide\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Guide**\n\n<img width=\"30\" src=\"/img/resources/azure/general/heart.png\" alt=\"Heart\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Heart**\n\n<img width=\"30\" src=\"/img/resources/azure/general/help-and-support.png\" alt=\"HelpAndSupport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.HelpAndSupport**\n\n<img width=\"30\" src=\"/img/resources/azure/general/helpsupport.png\" alt=\"Helpsupport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Helpsupport**\n\n<img width=\"30\" src=\"/img/resources/azure/general/image.png\" alt=\"Image\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Image**\n\n<img width=\"30\" src=\"/img/resources/azure/general/information.png\" alt=\"Information\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Information**\n\n<img width=\"30\" src=\"/img/resources/azure/general/input-output.png\" alt=\"InputOutput\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.InputOutput**\n\n<img width=\"30\" src=\"/img/resources/azure/general/journey-hub.png\" alt=\"JourneyHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.JourneyHub**\n\n<img width=\"30\" src=\"/img/resources/azure/general/launch-portal.png\" alt=\"LaunchPortal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.LaunchPortal**\n\n<img width=\"30\" src=\"/img/resources/azure/general/learn.png\" alt=\"Learn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Learn**\n\n<img width=\"30\" src=\"/img/resources/azure/general/load-test.png\" alt=\"LoadTest\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.LoadTest**\n\n<img width=\"30\" src=\"/img/resources/azure/general/location.png\" alt=\"Location\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Location**\n\n<img width=\"30\" src=\"/img/resources/azure/general/log-streaming.png\" alt=\"LogStreaming\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.LogStreaming**\n\n<img width=\"30\" src=\"/img/resources/azure/general/management-groups.png\" alt=\"ManagementGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ManagementGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/general/management-portal.png\" alt=\"ManagementPortal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ManagementPortal**\n\n<img width=\"30\" src=\"/img/resources/azure/general/managementgroups.png\" alt=\"Managementgroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Managementgroups**\n\n<img width=\"30\" src=\"/img/resources/azure/general/marketplace-management.png\" alt=\"MarketplaceManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.MarketplaceManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/general/marketplace.png\" alt=\"Marketplace\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Marketplace**\n\n<img width=\"30\" src=\"/img/resources/azure/general/media-file.png\" alt=\"MediaFile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.MediaFile**\n\n<img width=\"30\" src=\"/img/resources/azure/general/media.png\" alt=\"Media\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Media**\n\n<img width=\"30\" src=\"/img/resources/azure/general/mobile-engagement.png\" alt=\"MobileEngagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.MobileEngagement**\n\n<img width=\"30\" src=\"/img/resources/azure/general/mobile.png\" alt=\"Mobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Mobile**\n\n<img width=\"30\" src=\"/img/resources/azure/general/module.png\" alt=\"Module\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Module**\n\n<img width=\"30\" src=\"/img/resources/azure/general/power-up.png\" alt=\"PowerUp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.PowerUp**\n\n<img width=\"30\" src=\"/img/resources/azure/general/power.png\" alt=\"Power\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Power**\n\n<img width=\"30\" src=\"/img/resources/azure/general/powershell.png\" alt=\"Powershell\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Powershell**\n\n<img width=\"30\" src=\"/img/resources/azure/general/preview-features.png\" alt=\"PreviewFeatures\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.PreviewFeatures**\n\n<img width=\"30\" src=\"/img/resources/azure/general/process-explorer.png\" alt=\"ProcessExplorer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ProcessExplorer**\n\n<img width=\"30\" src=\"/img/resources/azure/general/production-ready-database.png\" alt=\"ProductionReadyDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ProductionReadyDatabase**\n\n<img width=\"30\" src=\"/img/resources/azure/general/quickstart-center.png\" alt=\"QuickstartCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.QuickstartCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/general/quickstartcenter.png\" alt=\"Quickstartcenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Quickstartcenter**\n\n<img width=\"30\" src=\"/img/resources/azure/general/recent.png\" alt=\"Recent\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Recent**\n\n<img width=\"30\" src=\"/img/resources/azure/general/region-management.png\" alt=\"RegionManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.RegionManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/general/reservations.png\" alt=\"Reservations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Reservations**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resource-explorer.png\" alt=\"ResourceExplorer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ResourceExplorer**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resource-group-list.png\" alt=\"ResourceGroupList\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ResourceGroupList**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resource-groups.png\" alt=\"ResourceGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ResourceGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resource-linked.png\" alt=\"ResourceLinked\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ResourceLinked**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resource.png\" alt=\"Resource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Resource**\n\n<img width=\"30\" src=\"/img/resources/azure/general/resourcegroups.png\" alt=\"Resourcegroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Resourcegroups**\n\n<img width=\"30\" src=\"/img/resources/azure/general/scheduler.png\" alt=\"Scheduler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Scheduler**\n\n<img width=\"30\" src=\"/img/resources/azure/general/search-grid.png\" alt=\"SearchGrid\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.SearchGrid**\n\n<img width=\"30\" src=\"/img/resources/azure/general/search.png\" alt=\"Search\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Search**\n\n<img width=\"30\" src=\"/img/resources/azure/general/server-farm.png\" alt=\"ServerFarm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ServerFarm**\n\n<img width=\"30\" src=\"/img/resources/azure/general/service-health.png\" alt=\"ServiceHealth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.ServiceHealth**\n\n<img width=\"30\" src=\"/img/resources/azure/general/servicehealth.png\" alt=\"Servicehealth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Servicehealth**\n\n<img width=\"30\" src=\"/img/resources/azure/general/shareddashboard.png\" alt=\"Shareddashboard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Shareddashboard**\n\n<img width=\"30\" src=\"/img/resources/azure/general/ssd.png\" alt=\"Ssd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Ssd**\n\n<img width=\"30\" src=\"/img/resources/azure/general/storage-azure-files.png\" alt=\"StorageAzureFiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.StorageAzureFiles**\n\n<img width=\"30\" src=\"/img/resources/azure/general/storage-container.png\" alt=\"StorageContainer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.StorageContainer**\n\n<img width=\"30\" src=\"/img/resources/azure/general/storage-queue.png\" alt=\"StorageQueue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.StorageQueue**\n\n<img width=\"30\" src=\"/img/resources/azure/general/subscriptions.png\" alt=\"Subscriptions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Subscriptions**\n\n<img width=\"30\" src=\"/img/resources/azure/general/support.png\" alt=\"Support\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Support**\n\n<img width=\"30\" src=\"/img/resources/azure/general/supportrequests.png\" alt=\"Supportrequests\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Supportrequests**\n\n<img width=\"30\" src=\"/img/resources/azure/general/table.png\" alt=\"Table\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Table**\n\n<img width=\"30\" src=\"/img/resources/azure/general/tag.png\" alt=\"Tag\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Tag**\n\n<img width=\"30\" src=\"/img/resources/azure/general/tags.png\" alt=\"Tags\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Tags**\n\n<img width=\"30\" src=\"/img/resources/azure/general/templates.png\" alt=\"Templates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Templates**\n\n<img width=\"30\" src=\"/img/resources/azure/general/tfs-vc-repository.png\" alt=\"TfsVcRepository\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.TfsVcRepository**\n\n<img width=\"30\" src=\"/img/resources/azure/general/toolbox.png\" alt=\"Toolbox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Toolbox**\n\n<img width=\"30\" src=\"/img/resources/azure/general/troubleshoot.png\" alt=\"Troubleshoot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Troubleshoot**\n\n<img width=\"30\" src=\"/img/resources/azure/general/twousericon.png\" alt=\"Twousericon\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Twousericon**\n\n<img width=\"30\" src=\"/img/resources/azure/general/userhealthicon.png\" alt=\"Userhealthicon\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Userhealthicon**\n\n<img width=\"30\" src=\"/img/resources/azure/general/usericon.png\" alt=\"Usericon\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Usericon**\n\n<img width=\"30\" src=\"/img/resources/azure/general/userprivacy.png\" alt=\"Userprivacy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Userprivacy**\n\n<img width=\"30\" src=\"/img/resources/azure/general/userresource.png\" alt=\"Userresource\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Userresource**\n\n<img width=\"30\" src=\"/img/resources/azure/general/versions.png\" alt=\"Versions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Versions**\n\n<img width=\"30\" src=\"/img/resources/azure/general/web-slots.png\" alt=\"WebSlots\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.WebSlots**\n\n<img width=\"30\" src=\"/img/resources/azure/general/web-test.png\" alt=\"WebTest\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.WebTest**\n\n<img width=\"30\" src=\"/img/resources/azure/general/website-power.png\" alt=\"WebsitePower\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.WebsitePower**\n\n<img width=\"30\" src=\"/img/resources/azure/general/website-staging.png\" alt=\"WebsiteStaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.WebsiteStaging**\n\n<img width=\"30\" src=\"/img/resources/azure/general/whatsnew.png\" alt=\"Whatsnew\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Whatsnew**\n\n<img width=\"30\" src=\"/img/resources/azure/general/workbooks.png\" alt=\"Workbooks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Workbooks**\n\n<img width=\"30\" src=\"/img/resources/azure/general/workflow.png\" alt=\"Workflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.general.Workflow**\n\n## azure.hybridmulticloud\n\n\n<img width=\"30\" src=\"/img/resources/azure/hybridmulticloud/azure-operator-5g-core.png\" alt=\"AzureOperator5GCore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.hybridmulticloud.AzureOperator5GCore**\n\n<img width=\"30\" src=\"/img/resources/azure/hybridmulticloud/azure-operator-insights.png\" alt=\"AzureOperatorInsights\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.hybridmulticloud.AzureOperatorInsights**\n\n<img width=\"30\" src=\"/img/resources/azure/hybridmulticloud/azure-operator-nexus.png\" alt=\"AzureOperatorNexus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.hybridmulticloud.AzureOperatorNexus**\n\n<img width=\"30\" src=\"/img/resources/azure/hybridmulticloud/azure-operator-service-manager.png\" alt=\"AzureOperatorServiceManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.hybridmulticloud.AzureOperatorServiceManager**\n\n<img width=\"30\" src=\"/img/resources/azure/hybridmulticloud/azure-programmable-connectivity.png\" alt=\"AzureProgrammableConnectivity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.hybridmulticloud.AzureProgrammableConnectivity**\n\n## azure.identity\n\n\n<img width=\"30\" src=\"/img/resources/azure/identity/aad-licenses.png\" alt=\"AadLicenses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AadLicenses**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/access-review.png\" alt=\"AccessReview\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AccessReview**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/active-directory-connect-health.png\" alt=\"ActiveDirectoryConnectHealth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ActiveDirectoryConnectHealth**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/active-directory.png\" alt=\"ActiveDirectory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ActiveDirectory**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/ad-b2c.png\" alt=\"ADB2C\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ADB2C**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/ad-domain-services.png\" alt=\"ADDomainServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ADDomainServices**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/ad-identity-protection.png\" alt=\"ADIdentityProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ADIdentityProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/ad-privileged-identity-management.png\" alt=\"ADPrivilegedIdentityManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ADPrivilegedIdentityManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/administrative-units.png\" alt=\"AdministrativeUnits\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AdministrativeUnits**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/api-proxy.png\" alt=\"APIProxy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.APIProxy**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/app-registrations.png\" alt=\"AppRegistrations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AppRegistrations**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-active-directory.png\" alt=\"AzureActiveDirectory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureActiveDirectory**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-b2c.png\" alt=\"AzureADB2C\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADB2C**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-domain-services.png\" alt=\"AzureADDomainServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADDomainServices**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-identity-protection.png\" alt=\"AzureADIdentityProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADIdentityProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-privilege-identity-management.png\" alt=\"AzureADPrivilegeIdentityManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADPrivilegeIdentityManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-privleged-identity-management.png\" alt=\"AzureADPrivlegedIdentityManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADPrivlegedIdentityManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-ad-roles-and-administrators.png\" alt=\"AzureADRolesAndAdministrators\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureADRolesAndAdministrators**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/azure-information-protection.png\" alt=\"AzureInformationProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.AzureInformationProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/conditional-access.png\" alt=\"ConditionalAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ConditionalAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/custom-azure-ad-roles.png\" alt=\"CustomAzureADRoles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.CustomAzureADRoles**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/enterprise-applications.png\" alt=\"EnterpriseApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EnterpriseApplications**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-connect.png\" alt=\"EntraConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraConnect**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-domain-services.png\" alt=\"EntraDomainServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraDomainServices**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-id-protection.png\" alt=\"EntraIDProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraIDProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-managed-identities.png\" alt=\"EntraManagedIdentities\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraManagedIdentities**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-privleged-identity-management.png\" alt=\"EntraPrivlegedIdentityManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraPrivlegedIdentityManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/entra-verified-id.png\" alt=\"EntraVerifiedID\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.EntraVerifiedID**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/external-identities.png\" alt=\"ExternalIdentities\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ExternalIdentities**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/global-secure-access.png\" alt=\"GlobalSecureAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.GlobalSecureAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/groups.png\" alt=\"Groups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.Groups**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/identity-governance.png\" alt=\"IdentityGovernance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.IdentityGovernance**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/information-protection.png\" alt=\"InformationProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.InformationProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/internet-access.png\" alt=\"InternetAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.InternetAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/managed-identities.png\" alt=\"ManagedIdentities\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.ManagedIdentities**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/private-access.png\" alt=\"PrivateAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.PrivateAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/security.png\" alt=\"Security\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.Security**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/tenant-properties.png\" alt=\"TenantProperties\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.TenantProperties**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/user-settings.png\" alt=\"UserSettings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.UserSettings**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/users.png\" alt=\"Users\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.Users**\n\n<img width=\"30\" src=\"/img/resources/azure/identity/verifiable-credentials.png\" alt=\"VerifiableCredentials\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.identity.VerifiableCredentials**\n\n## azure.integration\n\n\n<img width=\"30\" src=\"/img/resources/azure/integration/api-connections.png\" alt=\"APIConnections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.APIConnections**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/api-for-fhir.png\" alt=\"APIForFhir\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.APIForFhir**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/api-management-services.png\" alt=\"APIManagementServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.APIManagementServices**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/api-management.png\" alt=\"APIManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.APIManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/app-configuration.png\" alt=\"AppConfiguration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AppConfiguration**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-api-for-fhir.png\" alt=\"AzureAPIForFhir\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureAPIForFhir**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-data-catalog.png\" alt=\"AzureDataCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureDataCatalog**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-databox-gateway.png\" alt=\"AzureDataboxGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureDataboxGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-service-bus.png\" alt=\"AzureServiceBus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureServiceBus**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-sql-server-stretch-databases.png\" alt=\"AzureSQLServerStretchDatabases\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureSQLServerStretchDatabases**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/azure-stack-edge.png\" alt=\"AzureStackEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.AzureStackEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/data-catalog.png\" alt=\"DataCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.DataCatalog**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/data-factories.png\" alt=\"DataFactories\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.DataFactories**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/event-grid-domains.png\" alt=\"EventGridDomains\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.EventGridDomains**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/event-grid-subscriptions.png\" alt=\"EventGridSubscriptions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.EventGridSubscriptions**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/event-grid-topics.png\" alt=\"EventGridTopics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.EventGridTopics**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/integration-accounts.png\" alt=\"IntegrationAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.IntegrationAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/integration-environments.png\" alt=\"IntegrationEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.IntegrationEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/integration-service-environments.png\" alt=\"IntegrationServiceEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.IntegrationServiceEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/logic-apps-custom-connector.png\" alt=\"LogicAppsCustomConnector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.LogicAppsCustomConnector**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/logic-apps.png\" alt=\"LogicApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.LogicApps**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/partner-namespace.png\" alt=\"PartnerNamespace\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.PartnerNamespace**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/partner-registration.png\" alt=\"PartnerRegistration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.PartnerRegistration**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/partner-topic.png\" alt=\"PartnerTopic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.PartnerTopic**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/power-platform.png\" alt=\"PowerPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.PowerPlatform**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/relays.png\" alt=\"Relays\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.Relays**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/sendgrid-accounts.png\" alt=\"SendgridAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.SendgridAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/service-bus-relays.png\" alt=\"ServiceBusRelays\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.ServiceBusRelays**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/service-bus.png\" alt=\"ServiceBus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.ServiceBus**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/service-catalog-managed-application-definitions.png\" alt=\"ServiceCatalogManagedApplicationDefinitions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.ServiceCatalogManagedApplicationDefinitions**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/software-as-a-service.png\" alt=\"SoftwareAsAService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.SoftwareAsAService**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/sql-data-warehouses.png\" alt=\"SQLDataWarehouses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.SQLDataWarehouses**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/storsimple-device-managers.png\" alt=\"StorsimpleDeviceManagers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.StorsimpleDeviceManagers**\n\n<img width=\"30\" src=\"/img/resources/azure/integration/system-topic.png\" alt=\"SystemTopic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.integration.SystemTopic**\n\n## azure.intune\n\n\n<img width=\"30\" src=\"/img/resources/azure/intune/azure-ad-roles-and-administrators.png\" alt=\"AzureADRolesAndAdministrators\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.AzureADRolesAndAdministrators**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/client-apps.png\" alt=\"ClientApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.ClientApps**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-compliance.png\" alt=\"DeviceCompliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceCompliance**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-configuration.png\" alt=\"DeviceConfiguration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceConfiguration**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-enrollment.png\" alt=\"DeviceEnrollment\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceEnrollment**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-security-apple.png\" alt=\"DeviceSecurityApple\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceSecurityApple**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-security-google.png\" alt=\"DeviceSecurityGoogle\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceSecurityGoogle**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/device-security-windows.png\" alt=\"DeviceSecurityWindows\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.DeviceSecurityWindows**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/devices.png\" alt=\"Devices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.Devices**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/ebooks.png\" alt=\"Ebooks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.Ebooks**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/exchange-access.png\" alt=\"ExchangeAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.ExchangeAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/intune-app-protection.png\" alt=\"IntuneAppProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.IntuneAppProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/intune-for-education.png\" alt=\"IntuneForEducation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.IntuneForEducation**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/intune.png\" alt=\"Intune\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.Intune**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/mindaro.png\" alt=\"Mindaro\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.Mindaro**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/security-baselines.png\" alt=\"SecurityBaselines\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.SecurityBaselines**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/software-updates.png\" alt=\"SoftwareUpdates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.SoftwareUpdates**\n\n<img width=\"30\" src=\"/img/resources/azure/intune/tenant-status.png\" alt=\"TenantStatus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.intune.TenantStatus**\n\n## azure.iot\n\n\n<img width=\"30\" src=\"/img/resources/azure/iot/azure-cosmos-db.png\" alt=\"AzureCosmosDb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.AzureCosmosDb**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/azure-databox-gateway.png\" alt=\"AzureDataboxGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.AzureDataboxGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/azure-iot-operations.png\" alt=\"AzureIotOperations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.AzureIotOperations**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/azure-maps-accounts.png\" alt=\"AzureMapsAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.AzureMapsAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/azure-stack.png\" alt=\"AzureStack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.AzureStack**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/device-provisioning-services.png\" alt=\"DeviceProvisioningServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.DeviceProvisioningServices**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/digital-twins.png\" alt=\"DigitalTwins\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.DigitalTwins**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/event-grid-subscriptions.png\" alt=\"EventGridSubscriptions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.EventGridSubscriptions**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/event-hub-clusters.png\" alt=\"EventHubClusters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.EventHubClusters**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/event-hubs.png\" alt=\"EventHubs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.EventHubs**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/function-apps.png\" alt=\"FunctionApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.FunctionApps**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/industrial-iot.png\" alt=\"IndustrialIot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.IndustrialIot**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/iot-central-applications.png\" alt=\"IotCentralApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.IotCentralApplications**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/iot-edge.png\" alt=\"IotEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.IotEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/iot-hub-security.png\" alt=\"IotHubSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.IotHubSecurity**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/iot-hub.png\" alt=\"IotHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.IotHub**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/logic-apps.png\" alt=\"LogicApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.LogicApps**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/machine-learning-studio-classic-web-services.png\" alt=\"MachineLearningStudioClassicWebServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.MachineLearningStudioClassicWebServices**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/machine-learning-studio-web-service-plans.png\" alt=\"MachineLearningStudioWebServicePlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.MachineLearningStudioWebServicePlans**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/machine-learning-studio-workspaces.png\" alt=\"MachineLearningStudioWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.MachineLearningStudioWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/maps.png\" alt=\"Maps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.Maps**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/notification-hub-namespaces.png\" alt=\"NotificationHubNamespaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.NotificationHubNamespaces**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/notification-hubs.png\" alt=\"NotificationHubs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.NotificationHubs**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/sphere.png\" alt=\"Sphere\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.Sphere**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/stack-hci-premium.png\" alt=\"StackHciPremium\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.StackHciPremium**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/stream-analytics-jobs.png\" alt=\"StreamAnalyticsJobs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.StreamAnalyticsJobs**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/time-series-data-sets.png\" alt=\"TimeSeriesDataSets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.TimeSeriesDataSets**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/time-series-insights-access-policies.png\" alt=\"TimeSeriesInsightsAccessPolicies\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.TimeSeriesInsightsAccessPolicies**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/time-series-insights-environments.png\" alt=\"TimeSeriesInsightsEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.TimeSeriesInsightsEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/time-series-insights-event-sources.png\" alt=\"TimeSeriesInsightsEventSources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.TimeSeriesInsightsEventSources**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/time-series-insights-events-sources.png\" alt=\"TimeSeriesInsightsEventsSources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.TimeSeriesInsightsEventsSources**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/windows-10-iot-core-services.png\" alt=\"Windows10IotCoreServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.Windows10IotCoreServices**\n\n<img width=\"30\" src=\"/img/resources/azure/iot/windows10-core-services.png\" alt=\"Windows10CoreServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.iot.Windows10CoreServices**\n\n## azure.managementgovernance\n\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/activity-log.png\" alt=\"ActivityLog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ActivityLog**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/advisor.png\" alt=\"Advisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Advisor**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/alerts.png\" alt=\"Alerts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Alerts**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/application-insights.png\" alt=\"ApplicationInsights\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ApplicationInsights**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/arc-machines.png\" alt=\"ArcMachines\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ArcMachines**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/automation-accounts.png\" alt=\"AutomationAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.AutomationAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/azure-arc.png\" alt=\"AzureArc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.AzureArc**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/azure-lighthouse.png\" alt=\"AzureLighthouse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.AzureLighthouse**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/blueprints.png\" alt=\"Blueprints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Blueprints**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/compliance.png\" alt=\"Compliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Compliance**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/cost-management-and-billing.png\" alt=\"CostManagementAndBilling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.CostManagementAndBilling**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/customer-lockbox-for-microsoft-azure.png\" alt=\"CustomerLockboxForMicrosoftAzure\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.CustomerLockboxForMicrosoftAzure**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/diagnostics-settings.png\" alt=\"DiagnosticsSettings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.DiagnosticsSettings**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/education.png\" alt=\"Education\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Education**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/intune-trends.png\" alt=\"IntuneTrends\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.IntuneTrends**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/log-analytics-workspaces.png\" alt=\"LogAnalyticsWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.LogAnalyticsWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/machinesazurearc.png\" alt=\"Machinesazurearc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Machinesazurearc**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/managed-applications-center.png\" alt=\"ManagedApplicationsCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ManagedApplicationsCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/managed-desktop.png\" alt=\"ManagedDesktop\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ManagedDesktop**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/metrics.png\" alt=\"Metrics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Metrics**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/monitor.png\" alt=\"Monitor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Monitor**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/my-customers.png\" alt=\"MyCustomers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.MyCustomers**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/operation-log-classic.png\" alt=\"OperationLogClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.OperationLogClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/policy.png\" alt=\"Policy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Policy**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/recovery-services-vaults.png\" alt=\"RecoveryServicesVaults\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.RecoveryServicesVaults**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/resource-graph-explorer.png\" alt=\"ResourceGraphExplorer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ResourceGraphExplorer**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/resources-provider.png\" alt=\"ResourcesProvider\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ResourcesProvider**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/scheduler-job-collections.png\" alt=\"SchedulerJobCollections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.SchedulerJobCollections**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/service-catalog-mad.png\" alt=\"ServiceCatalogMad\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ServiceCatalogMad**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/service-providers.png\" alt=\"ServiceProviders\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.ServiceProviders**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/solutions.png\" alt=\"Solutions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.Solutions**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/universal-print.png\" alt=\"UniversalPrint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.UniversalPrint**\n\n<img width=\"30\" src=\"/img/resources/azure/managementgovernance/user-privacy.png\" alt=\"UserPrivacy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.managementgovernance.UserPrivacy**\n\n## azure.menu\n\n\n<img width=\"30\" src=\"/img/resources/azure/menu/keys.png\" alt=\"Keys\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.menu.Keys**\n\n## azure.migrate\n\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/azure-databox-gateway.png\" alt=\"AzureDataboxGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.AzureDataboxGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/azure-migrate.png\" alt=\"AzureMigrate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.AzureMigrate**\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/azure-stack-edge.png\" alt=\"AzureStackEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.AzureStackEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/cost-management-and-billing.png\" alt=\"CostManagementAndBilling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.CostManagementAndBilling**\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/data-box.png\" alt=\"DataBox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.DataBox**\n\n<img width=\"30\" src=\"/img/resources/azure/migrate/recovery-services-vaults.png\" alt=\"RecoveryServicesVaults\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migrate.RecoveryServicesVaults**\n\n## azure.migration\n\n\n<img width=\"30\" src=\"/img/resources/azure/migration/azure-database-migration-services.png\" alt=\"AzureDatabaseMigrationServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.AzureDatabaseMigrationServices**\n\n<img width=\"30\" src=\"/img/resources/azure/migration/data-box-edge.png\" alt=\"DataBoxEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.DataBoxEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/migration/data-box.png\" alt=\"DataBox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.DataBox**\n\n<img width=\"30\" src=\"/img/resources/azure/migration/database-migration-services.png\" alt=\"DatabaseMigrationServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.DatabaseMigrationServices**\n\n<img width=\"30\" src=\"/img/resources/azure/migration/migration-projects.png\" alt=\"MigrationProjects\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.MigrationProjects**\n\n<img width=\"30\" src=\"/img/resources/azure/migration/recovery-services-vaults.png\" alt=\"RecoveryServicesVaults\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.migration.RecoveryServicesVaults**\n\n## azure.mixedreality\n\n\n<img width=\"30\" src=\"/img/resources/azure/mixedreality/remote-rendering.png\" alt=\"RemoteRendering\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mixedreality.RemoteRendering**\n\n<img width=\"30\" src=\"/img/resources/azure/mixedreality/spatial-anchor-accounts.png\" alt=\"SpatialAnchorAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mixedreality.SpatialAnchorAccounts**\n\n## azure.ml\n\n\n<img width=\"30\" src=\"/img/resources/azure/ml/azure-open-ai.png\" alt=\"AzureOpenAI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.AzureOpenAI**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/azure-speech-service.png\" alt=\"AzureSpeechService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.AzureSpeechService**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/batch-ai.png\" alt=\"BatchAI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.BatchAI**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/bot-services.png\" alt=\"BotServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.BotServices**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/cognitive-services.png\" alt=\"CognitiveServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.CognitiveServices**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/genomics-accounts.png\" alt=\"GenomicsAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.GenomicsAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/machine-learning-service-workspaces.png\" alt=\"MachineLearningServiceWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.MachineLearningServiceWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/machine-learning-studio-web-service-plans.png\" alt=\"MachineLearningStudioWebServicePlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.MachineLearningStudioWebServicePlans**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/machine-learning-studio-web-services.png\" alt=\"MachineLearningStudioWebServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.MachineLearningStudioWebServices**\n\n<img width=\"30\" src=\"/img/resources/azure/ml/machine-learning-studio-workspaces.png\" alt=\"MachineLearningStudioWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.ml.MachineLearningStudioWorkspaces**\n\n## azure.mobile\n\n\n<img width=\"30\" src=\"/img/resources/azure/mobile/app-service-mobile.png\" alt=\"AppServiceMobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mobile.AppServiceMobile**\n\n<img width=\"30\" src=\"/img/resources/azure/mobile/app-services.png\" alt=\"AppServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mobile.AppServices**\n\n<img width=\"30\" src=\"/img/resources/azure/mobile/mobile-engagement.png\" alt=\"MobileEngagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mobile.MobileEngagement**\n\n<img width=\"30\" src=\"/img/resources/azure/mobile/notification-hubs.png\" alt=\"NotificationHubs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mobile.NotificationHubs**\n\n<img width=\"30\" src=\"/img/resources/azure/mobile/power-platform.png\" alt=\"PowerPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.mobile.PowerPlatform**\n\n## azure.monitor\n\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/activity-log.png\" alt=\"ActivityLog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.ActivityLog**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/application-insights.png\" alt=\"ApplicationInsights\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.ApplicationInsights**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/auto-scale.png\" alt=\"AutoScale\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.AutoScale**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/azure-monitors-for-sap-solutions.png\" alt=\"AzureMonitorsForSAPSolutions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.AzureMonitorsForSAPSolutions**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/azure-workbooks.png\" alt=\"AzureWorkbooks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.AzureWorkbooks**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/change-analysis.png\" alt=\"ChangeAnalysis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.ChangeAnalysis**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/diagnostics-settings.png\" alt=\"DiagnosticsSettings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.DiagnosticsSettings**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/log-analytics-workspaces.png\" alt=\"LogAnalyticsWorkspaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.LogAnalyticsWorkspaces**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/metrics.png\" alt=\"Metrics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.Metrics**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/monitor.png\" alt=\"Monitor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.Monitor**\n\n<img width=\"30\" src=\"/img/resources/azure/monitor/network-watcher.png\" alt=\"NetworkWatcher\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.monitor.NetworkWatcher**\n\n## azure.network\n\n\n<img width=\"30\" src=\"/img/resources/azure/network/application-gateway.png\" alt=\"ApplicationGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.ApplicationGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/network/application-security-groups.png\" alt=\"ApplicationSecurityGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.ApplicationSecurityGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/network/cdn-profiles.png\" alt=\"CDNProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.CDNProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/network/connections.png\" alt=\"Connections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.Connections**\n\n<img width=\"30\" src=\"/img/resources/azure/network/ddos-protection-plans.png\" alt=\"DDOSProtectionPlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.DDOSProtectionPlans**\n\n<img width=\"30\" src=\"/img/resources/azure/network/dns-private-zones.png\" alt=\"DNSPrivateZones\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.DNSPrivateZones**\n\n<img width=\"30\" src=\"/img/resources/azure/network/dns-zones.png\" alt=\"DNSZones\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.DNSZones**\n\n<img width=\"30\" src=\"/img/resources/azure/network/expressroute-circuits.png\" alt=\"ExpressrouteCircuits\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.ExpressrouteCircuits**\n\n<img width=\"30\" src=\"/img/resources/azure/network/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.Firewall**\n\n<img width=\"30\" src=\"/img/resources/azure/network/front-doors.png\" alt=\"FrontDoors\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.FrontDoors**\n\n<img width=\"30\" src=\"/img/resources/azure/network/load-balancers.png\" alt=\"LoadBalancers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.LoadBalancers**\n\n<img width=\"30\" src=\"/img/resources/azure/network/local-network-gateways.png\" alt=\"LocalNetworkGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.LocalNetworkGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/network/network-interfaces.png\" alt=\"NetworkInterfaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.NetworkInterfaces**\n\n<img width=\"30\" src=\"/img/resources/azure/network/network-security-groups-classic.png\" alt=\"NetworkSecurityGroupsClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.NetworkSecurityGroupsClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/network/network-watcher.png\" alt=\"NetworkWatcher\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.NetworkWatcher**\n\n<img width=\"30\" src=\"/img/resources/azure/network/on-premises-data-gateways.png\" alt=\"OnPremisesDataGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.OnPremisesDataGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/network/private-endpoint.png\" alt=\"PrivateEndpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.PrivateEndpoint**\n\n<img width=\"30\" src=\"/img/resources/azure/network/public-ip-addresses.png\" alt=\"PublicIpAddresses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.PublicIpAddresses**\n\n<img width=\"30\" src=\"/img/resources/azure/network/reserved-ip-addresses-classic.png\" alt=\"ReservedIpAddressesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.ReservedIpAddressesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/network/route-filters.png\" alt=\"RouteFilters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.RouteFilters**\n\n<img width=\"30\" src=\"/img/resources/azure/network/route-tables.png\" alt=\"RouteTables\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.RouteTables**\n\n<img width=\"30\" src=\"/img/resources/azure/network/service-endpoint-policies.png\" alt=\"ServiceEndpointPolicies\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.ServiceEndpointPolicies**\n\n<img width=\"30\" src=\"/img/resources/azure/network/subnets.png\" alt=\"Subnets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.Subnets**\n\n<img width=\"30\" src=\"/img/resources/azure/network/traffic-manager-profiles.png\" alt=\"TrafficManagerProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.TrafficManagerProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/network/virtual-network-classic.png\" alt=\"VirtualNetworkClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.VirtualNetworkClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/network/virtual-network-gateways.png\" alt=\"VirtualNetworkGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.VirtualNetworkGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/network/virtual-networks.png\" alt=\"VirtualNetworks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.VirtualNetworks**\n\n<img width=\"30\" src=\"/img/resources/azure/network/virtual-wans.png\" alt=\"VirtualWans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.network.VirtualWans**\n\n## azure.networking\n\n\n<img width=\"30\" src=\"/img/resources/azure/networking/application-gateways.png\" alt=\"ApplicationGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ApplicationGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/atm-multistack.png\" alt=\"AtmMultistack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.AtmMultistack**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/azure-communications-gateway.png\" alt=\"AzureCommunicationsGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.AzureCommunicationsGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/azure-firewall-manager.png\" alt=\"AzureFirewallManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.AzureFirewallManager**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/azure-firewall-policy.png\" alt=\"AzureFirewallPolicy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.AzureFirewallPolicy**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/bastions.png\" alt=\"Bastions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.Bastions**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/cdn-profiles.png\" alt=\"CDNProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.CDNProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/connected-cache.png\" alt=\"ConnectedCache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ConnectedCache**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/connections.png\" alt=\"Connections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.Connections**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/ddos-protection-plans.png\" alt=\"DDOSProtectionPlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.DDOSProtectionPlans**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/dns-multistack.png\" alt=\"DNSMultistack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.DNSMultistack**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/dns-private-resolver.png\" alt=\"DNSPrivateResolver\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.DNSPrivateResolver**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/dns-security-policy.png\" alt=\"DNSSecurityPolicy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.DNSSecurityPolicy**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/dns-zones.png\" alt=\"DNSZones\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.DNSZones**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/expressroute-circuits.png\" alt=\"ExpressrouteCircuits\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ExpressrouteCircuits**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/firewalls.png\" alt=\"Firewalls\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.Firewalls**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/front-door-and-cdn-profiles.png\" alt=\"FrontDoorAndCDNProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.FrontDoorAndCDNProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/ip-address-manager.png\" alt=\"IpAddressManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.IpAddressManager**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/ip-groups.png\" alt=\"IpGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.IpGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/load-balancer-hub.png\" alt=\"LoadBalancerHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.LoadBalancerHub**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/load-balancers.png\" alt=\"LoadBalancers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.LoadBalancers**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/local-network-gateways.png\" alt=\"LocalNetworkGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.LocalNetworkGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/nat.png\" alt=\"Nat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.Nat**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/network-interfaces.png\" alt=\"NetworkInterfaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.NetworkInterfaces**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/network-security-groups.png\" alt=\"NetworkSecurityGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.NetworkSecurityGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/network-watcher.png\" alt=\"NetworkWatcher\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.NetworkWatcher**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/on-premises-data-gateways.png\" alt=\"OnPremisesDataGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.OnPremisesDataGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/private-link-service.png\" alt=\"PrivateLinkService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PrivateLinkService**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/private-link-services.png\" alt=\"PrivateLinkServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PrivateLinkServices**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/private-link.png\" alt=\"PrivateLink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PrivateLink**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/proximity-placement-groups.png\" alt=\"ProximityPlacementGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ProximityPlacementGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/public-ip-addresses-classic.png\" alt=\"PublicIpAddressesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PublicIpAddressesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/public-ip-addresses.png\" alt=\"PublicIpAddresses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PublicIpAddresses**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/public-ip-prefixes.png\" alt=\"PublicIpPrefixes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.PublicIpPrefixes**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/reserved-ip-addresses-classic.png\" alt=\"ReservedIpAddressesClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ReservedIpAddressesClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/resource-management-private-link.png\" alt=\"ResourceManagementPrivateLink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ResourceManagementPrivateLink**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/route-filters.png\" alt=\"RouteFilters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.RouteFilters**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/route-tables.png\" alt=\"RouteTables\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.RouteTables**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/service-endpoint-policies.png\" alt=\"ServiceEndpointPolicies\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.ServiceEndpointPolicies**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/spot-vm.png\" alt=\"SpotVM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.SpotVM**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/spot-vmss.png\" alt=\"SpotVmss\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.SpotVmss**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/subnet.png\" alt=\"Subnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.Subnet**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/traffic-controller.png\" alt=\"TrafficController\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.TrafficController**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/traffic-manager-profiles.png\" alt=\"TrafficManagerProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.TrafficManagerProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-network-gateways.png\" alt=\"VirtualNetworkGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualNetworkGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-networks-classic.png\" alt=\"VirtualNetworksClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualNetworksClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-networks.png\" alt=\"VirtualNetworks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualNetworks**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-router.png\" alt=\"VirtualRouter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualRouter**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-wan-hub.png\" alt=\"VirtualWanHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualWanHub**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/virtual-wans.png\" alt=\"VirtualWans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.VirtualWans**\n\n<img width=\"30\" src=\"/img/resources/azure/networking/web-application-firewall-policieswaf.png\" alt=\"WebApplicationFirewallPolicieswaf\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.networking.WebApplicationFirewallPolicieswaf**\n\n## azure.newicons\n\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/azure-sustainability.png\" alt=\"AzureSustainability\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.AzureSustainability**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/connected-vehicle-platform.png\" alt=\"ConnectedVehiclePlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.ConnectedVehiclePlatform**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/entra-connect-health.png\" alt=\"EntraConnectHealth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.EntraConnectHealth**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/entra-connect-sync.png\" alt=\"EntraConnectSync\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.EntraConnectSync**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/icm-troubleshooting.png\" alt=\"IcmTroubleshooting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.IcmTroubleshooting**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/osconfig.png\" alt=\"Osconfig\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.Osconfig**\n\n<img width=\"30\" src=\"/img/resources/azure/newicons/storage-actions.png\" alt=\"StorageActions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.newicons.StorageActions**\n\n## azure.other\n\n\n<img width=\"30\" src=\"/img/resources/azure/other/aad-licenses.png\" alt=\"AadLicenses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AadLicenses**\n\n<img width=\"30\" src=\"/img/resources/azure/other/aks-istio.png\" alt=\"AksIstio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AksIstio**\n\n<img width=\"30\" src=\"/img/resources/azure/other/app-compliance-automation.png\" alt=\"AppComplianceAutomation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AppComplianceAutomation**\n\n<img width=\"30\" src=\"/img/resources/azure/other/app-registrations.png\" alt=\"AppRegistrations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AppRegistrations**\n\n<img width=\"30\" src=\"/img/resources/azure/other/aquila.png\" alt=\"Aquila\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Aquila**\n\n<img width=\"30\" src=\"/img/resources/azure/other/arc-data-services.png\" alt=\"ArcDataServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ArcDataServices**\n\n<img width=\"30\" src=\"/img/resources/azure/other/arc-kubernetes.png\" alt=\"ArcKubernetes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ArcKubernetes**\n\n<img width=\"30\" src=\"/img/resources/azure/other/arc-postgresql-.png\" alt=\"ArcPostgresql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ArcPostgresql**\n\n<img width=\"30\" src=\"/img/resources/azure/other/arc-sql-managed-instance.png\" alt=\"ArcSQLManagedInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ArcSQLManagedInstance**\n\n<img width=\"30\" src=\"/img/resources/azure/other/arc-sql-server.png\" alt=\"ArcSQLServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ArcSQLServer**\n\n<img width=\"30\" src=\"/img/resources/azure/other/avs-vm.png\" alt=\"AvsVM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AvsVM**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-a.png\" alt=\"AzureA\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureA**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-backup-center.png\" alt=\"AzureBackupCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureBackupCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-center-for-sap.png\" alt=\"AzureCenterForSAP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureCenterForSAP**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-chaos-studio.png\" alt=\"AzureChaosStudio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureChaosStudio**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-cloud-shell.png\" alt=\"AzureCloudShell\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureCloudShell**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-communication-services.png\" alt=\"AzureCommunicationServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureCommunicationServices**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-compute-galleries.png\" alt=\"AzureComputeGalleries\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureComputeGalleries**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-deployment-environments.png\" alt=\"AzureDeploymentEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureDeploymentEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-dev-tunnels.png\" alt=\"AzureDevTunnels\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureDevTunnels**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-edge-hardware-center.png\" alt=\"AzureEdgeHardwareCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureEdgeHardwareCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-hpc-workbenches.png\" alt=\"AzureHpcWorkbenches\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureHpcWorkbenches**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-load-testing.png\" alt=\"AzureLoadTesting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureLoadTesting**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-managed-grafana.png\" alt=\"AzureManagedGrafana\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureManagedGrafana**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-monitor-dashboard.png\" alt=\"AzureMonitorDashboard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureMonitorDashboard**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-network-function-manager-functions.png\" alt=\"AzureNetworkFunctionManagerFunctions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureNetworkFunctionManagerFunctions**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-network-function-manager.png\" alt=\"AzureNetworkFunctionManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureNetworkFunctionManager**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-orbital.png\" alt=\"AzureOrbital\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureOrbital**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-quotas.png\" alt=\"AzureQuotas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureQuotas**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-sphere.png\" alt=\"AzureSphere\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureSphere**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-storage-mover.png\" alt=\"AzureStorageMover\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureStorageMover**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-support-center-blue.png\" alt=\"AzureSupportCenterBlue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureSupportCenterBlue**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-video-indexer.png\" alt=\"AzureVideoIndexer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureVideoIndexer**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-virtual-desktop.png\" alt=\"AzureVirtualDesktop\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureVirtualDesktop**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azure-vmware-solution.png\" alt=\"AzureVmwareSolution\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.AzureVmwareSolution**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azureattestation.png\" alt=\"Azureattestation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Azureattestation**\n\n<img width=\"30\" src=\"/img/resources/azure/other/azurite.png\" alt=\"Azurite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Azurite**\n\n<img width=\"30\" src=\"/img/resources/azure/other/backup-vault.png\" alt=\"BackupVault\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.BackupVault**\n\n<img width=\"30\" src=\"/img/resources/azure/other/bare-metal-infrastructure.png\" alt=\"BareMetalInfrastructure\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.BareMetalInfrastructure**\n\n<img width=\"30\" src=\"/img/resources/azure/other/capacity-reservation-groups.png\" alt=\"CapacityReservationGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CapacityReservationGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/other/central-service-instance-for-sap.png\" alt=\"CentralServiceInstanceForSAP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CentralServiceInstanceForSAP**\n\n<img width=\"30\" src=\"/img/resources/azure/other/ceres.png\" alt=\"Ceres\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Ceres**\n\n<img width=\"30\" src=\"/img/resources/azure/other/cloud-services-extended-support.png\" alt=\"CloudServicesExtendedSupport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CloudServicesExtendedSupport**\n\n<img width=\"30\" src=\"/img/resources/azure/other/community-images.png\" alt=\"CommunityImages\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CommunityImages**\n\n<img width=\"30\" src=\"/img/resources/azure/other/compliance-center.png\" alt=\"ComplianceCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ComplianceCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/confidential-ledgers.png\" alt=\"ConfidentialLedgers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ConfidentialLedgers**\n\n<img width=\"30\" src=\"/img/resources/azure/other/container-apps-environments.png\" alt=\"ContainerAppsEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ContainerAppsEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/other/cost-export.png\" alt=\"CostExport\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CostExport**\n\n<img width=\"30\" src=\"/img/resources/azure/other/custom-ip-prefix.png\" alt=\"CustomIpPrefix\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.CustomIpPrefix**\n\n<img width=\"30\" src=\"/img/resources/azure/other/dashboard-hub.png\" alt=\"DashboardHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DashboardHub**\n\n<img width=\"30\" src=\"/img/resources/azure/other/data-collection-rules.png\" alt=\"DataCollectionRules\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DataCollectionRules**\n\n<img width=\"30\" src=\"/img/resources/azure/other/database-instance-for-sap.png\" alt=\"DatabaseInstanceForSAP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DatabaseInstanceForSAP**\n\n<img width=\"30\" src=\"/img/resources/azure/other/dedicated-hsm.png\" alt=\"DedicatedHsm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DedicatedHsm**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-cm-local-manager.png\" alt=\"DefenderCmLocalManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderCmLocalManager**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-dcs-controller.png\" alt=\"DefenderDcsController\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderDcsController**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-distributer-control-system.png\" alt=\"DefenderDistributerControlSystem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderDistributerControlSystem**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-engineering-station.png\" alt=\"DefenderEngineeringStation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderEngineeringStation**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-external-management.png\" alt=\"DefenderExternalManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderExternalManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-freezer-monitor.png\" alt=\"DefenderFreezerMonitor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderFreezerMonitor**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-historian.png\" alt=\"DefenderHistorian\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderHistorian**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-hmi.png\" alt=\"DefenderHmi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderHmi**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-industrial-packaging-system.png\" alt=\"DefenderIndustrialPackagingSystem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderIndustrialPackagingSystem**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-industrial-printer.png\" alt=\"DefenderIndustrialPrinter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderIndustrialPrinter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-industrial-robot.png\" alt=\"DefenderIndustrialRobot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderIndustrialRobot**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-industrial-scale-system.png\" alt=\"DefenderIndustrialScaleSystem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderIndustrialScaleSystem**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-marquee.png\" alt=\"DefenderMarquee\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderMarquee**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-meter.png\" alt=\"DefenderMeter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderMeter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-plc.png\" alt=\"DefenderPlc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderPlc**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-pneumatic-device.png\" alt=\"DefenderPneumaticDevice\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderPneumaticDevice**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-programable-board.png\" alt=\"DefenderProgramableBoard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderProgramableBoard**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-relay.png\" alt=\"DefenderRelay\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderRelay**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-robot-controller.png\" alt=\"DefenderRobotController\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderRobotController**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-rtu.png\" alt=\"DefenderRtu\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderRtu**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-sensor.png\" alt=\"DefenderSensor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderSensor**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-slot.png\" alt=\"DefenderSlot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderSlot**\n\n<img width=\"30\" src=\"/img/resources/azure/other/defender-web-guiding-system.png\" alt=\"DefenderWebGuidingSystem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DefenderWebGuidingSystem**\n\n<img width=\"30\" src=\"/img/resources/azure/other/device-update-iot-hub.png\" alt=\"DeviceUpdateIotHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DeviceUpdateIotHub**\n\n<img width=\"30\" src=\"/img/resources/azure/other/disk-pool.png\" alt=\"DiskPool\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.DiskPool**\n\n<img width=\"30\" src=\"/img/resources/azure/other/edge-management.png\" alt=\"EdgeManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.EdgeManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/other/elastic-san.png\" alt=\"ElasticSan\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ElasticSan**\n\n<img width=\"30\" src=\"/img/resources/azure/other/exchange-on-premises-access.png\" alt=\"ExchangeOnPremisesAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ExchangeOnPremisesAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/other/express-route-traffic-collector.png\" alt=\"ExpressRouteTrafficCollector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ExpressRouteTrafficCollector**\n\n<img width=\"30\" src=\"/img/resources/azure/other/expressroute-direct.png\" alt=\"ExpressrouteDirect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ExpressrouteDirect**\n\n<img width=\"30\" src=\"/img/resources/azure/other/fhir-service.png\" alt=\"FhirService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.FhirService**\n\n<img width=\"30\" src=\"/img/resources/azure/other/fiji.png\" alt=\"Fiji\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Fiji**\n\n<img width=\"30\" src=\"/img/resources/azure/other/hdi-aks-cluster.png\" alt=\"HdiAksCluster\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.HdiAksCluster**\n\n<img width=\"30\" src=\"/img/resources/azure/other/instance-pools.png\" alt=\"InstancePools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.InstancePools**\n\n<img width=\"30\" src=\"/img/resources/azure/other/internet-analyzer-profiles.png\" alt=\"InternetAnalyzerProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.InternetAnalyzerProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/other/kubernetes-fleet-manager.png\" alt=\"KubernetesFleetManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.KubernetesFleetManager**\n\n<img width=\"30\" src=\"/img/resources/azure/other/local-network-gateways.png\" alt=\"LocalNetworkGateways\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.LocalNetworkGateways**\n\n<img width=\"30\" src=\"/img/resources/azure/other/log-analytics-query-pack.png\" alt=\"LogAnalyticsQueryPack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.LogAnalyticsQueryPack**\n\n<img width=\"30\" src=\"/img/resources/azure/other/managed-instance-apache-cassandra.png\" alt=\"ManagedInstanceApacheCassandra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ManagedInstanceApacheCassandra**\n\n<img width=\"30\" src=\"/img/resources/azure/other/medtech-service.png\" alt=\"MedtechService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.MedtechService**\n\n<img width=\"30\" src=\"/img/resources/azure/other/microsoft-dev-box.png\" alt=\"MicrosoftDevBox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.MicrosoftDevBox**\n\n<img width=\"30\" src=\"/img/resources/azure/other/mission-landing-zone.png\" alt=\"MissionLandingZone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.MissionLandingZone**\n\n<img width=\"30\" src=\"/img/resources/azure/other/mobile-networks.png\" alt=\"MobileNetworks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.MobileNetworks**\n\n<img width=\"30\" src=\"/img/resources/azure/other/modular-data-center.png\" alt=\"ModularDataCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ModularDataCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/network-managers.png\" alt=\"NetworkManagers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.NetworkManagers**\n\n<img width=\"30\" src=\"/img/resources/azure/other/network-security-perimeters.png\" alt=\"NetworkSecurityPerimeters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.NetworkSecurityPerimeters**\n\n<img width=\"30\" src=\"/img/resources/azure/other/open-supply-chain-platform.png\" alt=\"OpenSupplyChainPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.OpenSupplyChainPlatform**\n\n<img width=\"30\" src=\"/img/resources/azure/other/peering-service.png\" alt=\"PeeringService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.PeeringService**\n\n<img width=\"30\" src=\"/img/resources/azure/other/peerings.png\" alt=\"Peerings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Peerings**\n\n<img width=\"30\" src=\"/img/resources/azure/other/private-endpoints.png\" alt=\"PrivateEndpoints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.PrivateEndpoints**\n\n<img width=\"30\" src=\"/img/resources/azure/other/reserved-capacity.png\" alt=\"ReservedCapacity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ReservedCapacity**\n\n<img width=\"30\" src=\"/img/resources/azure/other/resource-guard.png\" alt=\"ResourceGuard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ResourceGuard**\n\n<img width=\"30\" src=\"/img/resources/azure/other/resource-mover.png\" alt=\"ResourceMover\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ResourceMover**\n\n<img width=\"30\" src=\"/img/resources/azure/other/rtos.png\" alt=\"Rtos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Rtos**\n\n<img width=\"30\" src=\"/img/resources/azure/other/savings-plans.png\" alt=\"SavingsPlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.SavingsPlans**\n\n<img width=\"30\" src=\"/img/resources/azure/other/scvmm-management-servers.png\" alt=\"ScvmmManagementServers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.ScvmmManagementServers**\n\n<img width=\"30\" src=\"/img/resources/azure/other/sonic-dash.png\" alt=\"SonicDash\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.SonicDash**\n\n<img width=\"30\" src=\"/img/resources/azure/other/ssh-keys.png\" alt=\"SshKeys\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.SshKeys**\n\n<img width=\"30\" src=\"/img/resources/azure/other/storage-functions.png\" alt=\"StorageFunctions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.StorageFunctions**\n\n<img width=\"30\" src=\"/img/resources/azure/other/targets-management.png\" alt=\"TargetsManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.TargetsManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/other/template-specs.png\" alt=\"TemplateSpecs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.TemplateSpecs**\n\n<img width=\"30\" src=\"/img/resources/azure/other/test-base.png\" alt=\"TestBase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.TestBase**\n\n<img width=\"30\" src=\"/img/resources/azure/other/update-management-center.png\" alt=\"UpdateManagementCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.UpdateManagementCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/other/video-analyzers.png\" alt=\"VideoAnalyzers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VideoAnalyzers**\n\n<img width=\"30\" src=\"/img/resources/azure/other/virtual-enclaves.png\" alt=\"VirtualEnclaves\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VirtualEnclaves**\n\n<img width=\"30\" src=\"/img/resources/azure/other/virtual-instance-for-sap.png\" alt=\"VirtualInstanceForSAP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VirtualInstanceForSAP**\n\n<img width=\"30\" src=\"/img/resources/azure/other/virtual-visits-builder.png\" alt=\"VirtualVisitsBuilder\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VirtualVisitsBuilder**\n\n<img width=\"30\" src=\"/img/resources/azure/other/vm-app-definitions.png\" alt=\"VMAppDefinitions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VMAppDefinitions**\n\n<img width=\"30\" src=\"/img/resources/azure/other/vm-app-versions.png\" alt=\"VMAppVersions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VMAppVersions**\n\n<img width=\"30\" src=\"/img/resources/azure/other/vm-image-version.png\" alt=\"VMImageVersion\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.VMImageVersion**\n\n<img width=\"30\" src=\"/img/resources/azure/other/wac.png\" alt=\"Wac\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.Wac**\n\n<img width=\"30\" src=\"/img/resources/azure/other/web-app-database.png\" alt=\"WebAppDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.WebAppDatabase**\n\n<img width=\"30\" src=\"/img/resources/azure/other/web-jobs.png\" alt=\"WebJobs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.WebJobs**\n\n<img width=\"30\" src=\"/img/resources/azure/other/windows-notification-services.png\" alt=\"WindowsNotificationServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.WindowsNotificationServices**\n\n<img width=\"30\" src=\"/img/resources/azure/other/worker-container-app.png\" alt=\"WorkerContainerApp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.other.WorkerContainerApp**\n\n## azure.security\n\n\n<img width=\"30\" src=\"/img/resources/azure/security/application-security-groups.png\" alt=\"ApplicationSecurityGroups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.ApplicationSecurityGroups**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-ad-authentication-methods.png\" alt=\"AzureADAuthenticationMethods\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureADAuthenticationMethods**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-ad-identity-protection.png\" alt=\"AzureADIdentityProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureADIdentityProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-ad-privleged-identity-management.png\" alt=\"AzureADPrivlegedIdentityManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureADPrivlegedIdentityManagement**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-ad-risky-signins.png\" alt=\"AzureADRiskySignins\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureADRiskySignins**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-ad-risky-users.png\" alt=\"AzureADRiskyUsers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureADRiskyUsers**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-information-protection.png\" alt=\"AzureInformationProtection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureInformationProtection**\n\n<img width=\"30\" src=\"/img/resources/azure/security/azure-sentinel.png\" alt=\"AzureSentinel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.AzureSentinel**\n\n<img width=\"30\" src=\"/img/resources/azure/security/conditional-access.png\" alt=\"ConditionalAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.ConditionalAccess**\n\n<img width=\"30\" src=\"/img/resources/azure/security/defender.png\" alt=\"Defender\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.Defender**\n\n<img width=\"30\" src=\"/img/resources/azure/security/detonation.png\" alt=\"Detonation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.Detonation**\n\n<img width=\"30\" src=\"/img/resources/azure/security/extended-security-updates.png\" alt=\"ExtendedSecurityUpdates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.ExtendedSecurityUpdates**\n\n<img width=\"30\" src=\"/img/resources/azure/security/extendedsecurityupdates.png\" alt=\"Extendedsecurityupdates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.Extendedsecurityupdates**\n\n<img width=\"30\" src=\"/img/resources/azure/security/identity-secure-score.png\" alt=\"IdentitySecureScore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.IdentitySecureScore**\n\n<img width=\"30\" src=\"/img/resources/azure/security/key-vaults.png\" alt=\"KeyVaults\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.KeyVaults**\n\n<img width=\"30\" src=\"/img/resources/azure/security/microsoft-defender-easm.png\" alt=\"MicrosoftDefenderEasm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.MicrosoftDefenderEasm**\n\n<img width=\"30\" src=\"/img/resources/azure/security/microsoft-defender-for-cloud.png\" alt=\"MicrosoftDefenderForCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.MicrosoftDefenderForCloud**\n\n<img width=\"30\" src=\"/img/resources/azure/security/microsoft-defender-for-iot.png\" alt=\"MicrosoftDefenderForIot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.MicrosoftDefenderForIot**\n\n<img width=\"30\" src=\"/img/resources/azure/security/multifactor-authentication.png\" alt=\"MultifactorAuthentication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.MultifactorAuthentication**\n\n<img width=\"30\" src=\"/img/resources/azure/security/security-center.png\" alt=\"SecurityCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.SecurityCenter**\n\n<img width=\"30\" src=\"/img/resources/azure/security/sentinel.png\" alt=\"Sentinel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.Sentinel**\n\n<img width=\"30\" src=\"/img/resources/azure/security/user-settings.png\" alt=\"UserSettings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.security.UserSettings**\n\n## azure.storage\n\n\n<img width=\"30\" src=\"/img/resources/azure/storage/archive-storage.png\" alt=\"ArchiveStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.ArchiveStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azure-databox-gateway.png\" alt=\"AzureDataboxGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.AzureDataboxGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azure-fileshares.png\" alt=\"AzureFileshares\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.AzureFileshares**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azure-hcp-cache.png\" alt=\"AzureHcpCache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.AzureHcpCache**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azure-netapp-files.png\" alt=\"AzureNetappFiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.AzureNetappFiles**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azure-stack-edge.png\" alt=\"AzureStackEdge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.AzureStackEdge**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/azurefxtedgefiler.png\" alt=\"Azurefxtedgefiler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.Azurefxtedgefiler**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/blob-storage.png\" alt=\"BlobStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.BlobStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-box-edge-data-box-gateway.png\" alt=\"DataBoxEdgeDataBoxGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataBoxEdgeDataBoxGateway**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-box.png\" alt=\"DataBox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataBox**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-lake-storage-gen1.png\" alt=\"DataLakeStorageGen1\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataLakeStorageGen1**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-lake-storage.png\" alt=\"DataLakeStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataLakeStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-share-invitations.png\" alt=\"DataShareInvitations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataShareInvitations**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/data-shares.png\" alt=\"DataShares\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.DataShares**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/general-storage.png\" alt=\"GeneralStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.GeneralStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/import-export-jobs.png\" alt=\"ImportExportJobs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.ImportExportJobs**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/netapp-files.png\" alt=\"NetappFiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.NetappFiles**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/queues-storage.png\" alt=\"QueuesStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.QueuesStorage**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/recovery-services-vaults.png\" alt=\"RecoveryServicesVaults\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.RecoveryServicesVaults**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storage-accounts-classic.png\" alt=\"StorageAccountsClassic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorageAccountsClassic**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storage-accounts.png\" alt=\"StorageAccounts\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorageAccounts**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storage-explorer.png\" alt=\"StorageExplorer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorageExplorer**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storage-sync-services.png\" alt=\"StorageSyncServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorageSyncServices**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storsimple-data-managers.png\" alt=\"StorsimpleDataManagers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorsimpleDataManagers**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/storsimple-device-managers.png\" alt=\"StorsimpleDeviceManagers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.StorsimpleDeviceManagers**\n\n<img width=\"30\" src=\"/img/resources/azure/storage/table-storage.png\" alt=\"TableStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.storage.TableStorage**\n\n## azure.web\n\n\n<img width=\"30\" src=\"/img/resources/azure/web/api-center.png\" alt=\"APICenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.APICenter**\n\n<img width=\"30\" src=\"/img/resources/azure/web/api-connections.png\" alt=\"APIConnections\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.APIConnections**\n\n<img width=\"30\" src=\"/img/resources/azure/web/api-management-services.png\" alt=\"APIManagementServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.APIManagementServices**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-service-certificates.png\" alt=\"AppServiceCertificates\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppServiceCertificates**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-service-domains.png\" alt=\"AppServiceDomains\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppServiceDomains**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-service-environments.png\" alt=\"AppServiceEnvironments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppServiceEnvironments**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-service-plans.png\" alt=\"AppServicePlans\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppServicePlans**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-services.png\" alt=\"AppServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppServices**\n\n<img width=\"30\" src=\"/img/resources/azure/web/app-space.png\" alt=\"AppSpace\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AppSpace**\n\n<img width=\"30\" src=\"/img/resources/azure/web/azure-media-service.png\" alt=\"AzureMediaService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AzureMediaService**\n\n<img width=\"30\" src=\"/img/resources/azure/web/azure-spring-apps.png\" alt=\"AzureSpringApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.AzureSpringApps**\n\n<img width=\"30\" src=\"/img/resources/azure/web/cognitive-search.png\" alt=\"CognitiveSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.CognitiveSearch**\n\n<img width=\"30\" src=\"/img/resources/azure/web/cognitive-services.png\" alt=\"CognitiveServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.CognitiveServices**\n\n<img width=\"30\" src=\"/img/resources/azure/web/front-door-and-cdn-profiles.png\" alt=\"FrontDoorAndCDNProfiles\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.FrontDoorAndCDNProfiles**\n\n<img width=\"30\" src=\"/img/resources/azure/web/media-services.png\" alt=\"MediaServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.MediaServices**\n\n<img width=\"30\" src=\"/img/resources/azure/web/notification-hub-namespaces.png\" alt=\"NotificationHubNamespaces\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.NotificationHubNamespaces**\n\n<img width=\"30\" src=\"/img/resources/azure/web/power-platform.png\" alt=\"PowerPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.PowerPlatform**\n\n<img width=\"30\" src=\"/img/resources/azure/web/search.png\" alt=\"Search\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.Search**\n\n<img width=\"30\" src=\"/img/resources/azure/web/signalr.png\" alt=\"Signalr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.Signalr**\n\n<img width=\"30\" src=\"/img/resources/azure/web/static-apps.png\" alt=\"StaticApps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.azure.web.StaticApps**\n"
  },
  {
    "path": "docs/nodes/c4.md",
    "content": "---\nid: c4\ntitle: C4\n---\n\n## C4 Diagrams\n\n[C4](https://c4model.com/) is a standardized model to visualize software architecture.\nYou can generate C4 diagrams by using the node and edge classes from the `diagrams.c4` package:\n\n```python\nfrom diagrams import Diagram\nfrom diagrams.c4 import Person, Container, Database, System, SystemBoundary, Relationship\n\ngraph_attr = {\n    \"splines\": \"spline\",\n}\n\nwith Diagram(\"Container diagram for Internet Banking System\", direction=\"TB\", graph_attr=graph_attr):\n    customer = Person(\n        name=\"Personal Banking Customer\", description=\"A customer of the bank, with personal bank accounts.\"\n    )\n\n    with SystemBoundary(\"Internet Banking System\"):\n        webapp = Container(\n            name=\"Web Application\",\n            technology=\"Java and Spring MVC\",\n            description=\"Delivers the static content and the Internet banking single page application.\",\n        )\n\n        spa = Container(\n            name=\"Single-Page Application\",\n            technology=\"Javascript and Angular\",\n            description=\"Provides all of the Internet banking functionality to customers via their web browser.\",\n        )\n\n        mobileapp = Container(\n            name=\"Mobile App\",\n            technology=\"Xamarin\",\n            description=\"Provides a limited subset of the Internet banking functionality to customers via their mobile device.\",\n        )\n\n        api = Container(\n            name=\"API Application\",\n            technology=\"Java and Spring MVC\",\n            description=\"Provides Internet banking functionality via a JSON/HTTPS API.\",\n        )\n\n        database = Database(\n            name=\"Database\",\n            technology=\"Oracle Database Schema\",\n            description=\"Stores user registration information, hashed authentication credentials, access logs, etc.\",\n        )\n\n    email = System(name=\"E-mail System\", description=\"The internal Microsoft Exchange e-mail system.\", external=True)\n\n    mainframe = System(\n        name=\"Mainframe Banking System\",\n        description=\"Stores all of the core banking information about customers, accounts, transactions, etc.\",\n        external=True,\n    )\n\n    customer >> Relationship(\"Visits bigbank.com/ib using [HTTPS]\") >> webapp\n    customer >> Relationship(\"Views account balances, and makes payments using\") >> [spa, mobileapp]\n    webapp >> Relationship(\"Delivers to the customer's web browser\") >> spa\n    spa >> Relationship(\"Make API calls to [JSON/HTTPS]\") >> api\n    mobileapp >> Relationship(\"Make API calls to [JSON/HTTPS]\") >> api\n\n    api >> Relationship(\"reads from and writes to\") >> database\n    api >> Relationship(\"Sends email using [SMTP]\") >> email\n    api >> Relationship(\"Makes API calls to [XML/HTTPS]\") >> mainframe\n    customer << Relationship(\"Sends e-mails to\") << email\n```\n\nIt will produce the following diagram:\n\n![c4](/img/c4.png)\n"
  },
  {
    "path": "docs/nodes/custom.md",
    "content": "---\nid: custom\ntitle: Custom\n---\n\n## Custom with local icons\n\nFor this example we use the following architecture:\n\n```\n.\n├── custom_local.py\n├── my_resources\n│   ├── cc_heart.black.png\n│   ├── cc_attribution.png\n│   ├──...\n```\n\nThe content of custom_local.py file:\n\n```python\nfrom diagrams import Diagram, Cluster\nfrom diagrams.custom import Custom\n\n\nwith Diagram(\"Custom with local icons\\n Can be downloaded here: \\nhttps://creativecommons.org/about/downloads/\", show=False, filename=\"custom_local\", direction=\"LR\"):\n  cc_heart = Custom(\"Creative Commons\", \"./my_resources/cc_heart.black.png\")\n  cc_attribution = Custom(\"Credit must be given to the creator\", \"./my_resources/cc_attribution.png\")\n\n  cc_sa = Custom(\"Adaptations must be shared\\n under the same terms\", \"./my_resources/cc_sa.png\")\n  cc_nd = Custom(\"No derivatives or adaptations\\n of the work are permitted\", \"./my_resources/cc_nd.png\")\n  cc_zero = Custom(\"Public Domain Dedication\", \"./my_resources/cc_zero.png\")\n\n  with Cluster(\"Non Commercial\"):\n    non_commercial = [Custom(\"Y\", \"./my_resources/cc_nc-jp.png\") - Custom(\"E\", \"./my_resources/cc_nc-eu.png\") - Custom(\"S\", \"./my_resources/cc_nc.png\")]\n\n  cc_heart >> cc_attribution\n  cc_heart >> non_commercial\n  cc_heart >> cc_sa\n  cc_heart >> cc_nd\n  cc_heart >> cc_zero\n```\n\nIt will generate the following diagram:\n\n![custom local](/img/custom_local.png)\n\n\n## Custom with remote icons\n\nIf your icons are hosted and can be accessed when you generate the diagrams, you can\n\n```python\nfrom diagrams import Diagram, Cluster\nfrom diagrams.custom import Custom\nfrom urllib.request import urlretrieve\n\nwith Diagram(\"Custom with remote icons\", show=False, filename=\"custom_remote\", direction=\"LR\"):\n\n  # download the icon image file\n  diagrams_url = \"https://github.com/mingrammer/diagrams/raw/master/assets/img/diagrams.png\"\n  diagrams_icon = \"diagrams.png\"\n  urlretrieve(diagrams_url, diagrams_icon)\n\n  diagrams = Custom(\"Diagrams\", diagrams_icon)\n\n  with Cluster(\"Some Providers\"):\n\n    openstack_url = \"https://github.com/mingrammer/diagrams/raw/master/resources/openstack/openstack.png\"\n    openstack_icon = \"openstack.png\"\n    urlretrieve(openstack_url, openstack_icon)\n\n    openstack = Custom(\"OpenStack\", openstack_icon)\n\n    elastic_url = \"https://github.com/mingrammer/diagrams/raw/master/resources/elastic/saas/elastic.png\"\n    elastic_icon = \"elastic.png\"\n    urlretrieve(elastic_url, elastic_icon)\n\n    elastic = Custom(\"Elastic\", elastic_icon)\n\n  diagrams >> openstack\n  diagrams >> elastic\n```\n\nIt will generate the following diagram:\n\n![custom local](/img/custom_remote.png)\n\n\nAnother example can be found [Here](https://diagrams.mingrammer.com/docs/getting-started/examples#rabbitmq-consumers-with-custom-nodes).\n"
  },
  {
    "path": "docs/nodes/digitalocean.md",
    "content": "---\nid: digitalocean\ntitle: DigitalOcean\n---\n\nNode classes list of the digitalocean provider.\n\n## digitalocean.compute\n\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/containers.png\" alt=\"Containers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.Containers**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/docker.png\" alt=\"Docker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.Docker**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/droplet-connect.png\" alt=\"DropletConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.DropletConnect**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/droplet-snapshot.png\" alt=\"DropletSnapshot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.DropletSnapshot**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/droplet.png\" alt=\"Droplet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.Droplet**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/k8s-cluster.png\" alt=\"K8SCluster\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.K8SCluster**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/k8s-node-pool.png\" alt=\"K8SNodePool\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.K8SNodePool**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/compute/k8s-node.png\" alt=\"K8SNode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.compute.K8SNode**\n\n## digitalocean.database\n\n\n<img width=\"30\" src=\"/img/resources/digitalocean/database/dbaas-primary-standby-more.png\" alt=\"DbaasPrimaryStandbyMore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.database.DbaasPrimaryStandbyMore**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/database/dbaas-primary.png\" alt=\"DbaasPrimary\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.database.DbaasPrimary**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/database/dbaas-read-only.png\" alt=\"DbaasReadOnly\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.database.DbaasReadOnly**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/database/dbaas-standby.png\" alt=\"DbaasStandby\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.database.DbaasStandby**\n\n## digitalocean.network\n\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/certificate.png\" alt=\"Certificate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.Certificate**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/domain-registration.png\" alt=\"DomainRegistration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.DomainRegistration**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/domain.png\" alt=\"Domain\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.Domain**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.Firewall**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/floating-ip.png\" alt=\"FloatingIp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.FloatingIp**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/internet-gateway.png\" alt=\"InternetGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.InternetGateway**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/load-balancer.png\" alt=\"LoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.LoadBalancer**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/managed-vpn.png\" alt=\"ManagedVpn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.ManagedVpn**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/network/vpc.png\" alt=\"Vpc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.network.Vpc**\n\n## digitalocean.storage\n\n\n<img width=\"30\" src=\"/img/resources/digitalocean/storage/folder.png\" alt=\"Folder\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.storage.Folder**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/storage/space.png\" alt=\"Space\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.storage.Space**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/storage/volume-snapshot.png\" alt=\"VolumeSnapshot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.storage.VolumeSnapshot**\n\n<img width=\"30\" src=\"/img/resources/digitalocean/storage/volume.png\" alt=\"Volume\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.digitalocean.storage.Volume**\n"
  },
  {
    "path": "docs/nodes/elastic.md",
    "content": "---\nid: elastic\ntitle: Elastic\n---\n\nNode classes list of the elastic provider.\n\n## elastic.agent\n\n\n<img width=\"30\" src=\"/img/resources/elastic/agent/agent.png\" alt=\"Agent\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.agent.Agent**\n\n<img width=\"30\" src=\"/img/resources/elastic/agent/endpoint.png\" alt=\"Endpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.agent.Endpoint**\n\n<img width=\"30\" src=\"/img/resources/elastic/agent/fleet.png\" alt=\"Fleet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.agent.Fleet**\n\n<img width=\"30\" src=\"/img/resources/elastic/agent/integrations.png\" alt=\"Integrations\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.agent.Integrations**\n\n## elastic.beats\n\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/apm.png\" alt=\"APM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.APM**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/auditbeat.png\" alt=\"Auditbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Auditbeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/filebeat.png\" alt=\"Filebeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Filebeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/functionbeat.png\" alt=\"Functionbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Functionbeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/heartbeat.png\" alt=\"Heartbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Heartbeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/metricbeat.png\" alt=\"Metricbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Metricbeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/packetbeat.png\" alt=\"Packetbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Packetbeat**\n\n<img width=\"30\" src=\"/img/resources/elastic/beats/winlogbeat.png\" alt=\"Winlogbeat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.beats.Winlogbeat**\n\n## elastic.elasticsearch\n\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/alerting.png\" alt=\"Alerting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Alerting**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/beats.png\" alt=\"Beats\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Beats**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/elasticsearch.png\" alt=\"Elasticsearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Elasticsearch**, **ElasticSearch** (alias)\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/kibana.png\" alt=\"Kibana\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Kibana**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/logstash-pipeline.png\" alt=\"LogstashPipeline\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.LogstashPipeline**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/logstash.png\" alt=\"Logstash\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Logstash**, **LogStash** (alias)\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/machine-learning.png\" alt=\"MachineLearning\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.MachineLearning**, **ML** (alias)\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/map-services.png\" alt=\"MapServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.MapServices**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/maps.png\" alt=\"Maps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Maps**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/monitoring.png\" alt=\"Monitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Monitoring**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/searchable-snapshots.png\" alt=\"SearchableSnapshots\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.SearchableSnapshots**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/security-settings.png\" alt=\"SecuritySettings\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.SecuritySettings**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/sql.png\" alt=\"SQL\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.SQL**\n\n<img width=\"30\" src=\"/img/resources/elastic/elasticsearch/stack.png\" alt=\"Stack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.elasticsearch.Stack**\n\n## elastic.enterprisesearch\n\n\n<img width=\"30\" src=\"/img/resources/elastic/enterprisesearch/app-search.png\" alt=\"AppSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.enterprisesearch.AppSearch**\n\n<img width=\"30\" src=\"/img/resources/elastic/enterprisesearch/crawler.png\" alt=\"Crawler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.enterprisesearch.Crawler**\n\n<img width=\"30\" src=\"/img/resources/elastic/enterprisesearch/enterprise-search.png\" alt=\"EnterpriseSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.enterprisesearch.EnterpriseSearch**\n\n<img width=\"30\" src=\"/img/resources/elastic/enterprisesearch/site-search.png\" alt=\"SiteSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.enterprisesearch.SiteSearch**\n\n<img width=\"30\" src=\"/img/resources/elastic/enterprisesearch/workplace-search.png\" alt=\"WorkplaceSearch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.enterprisesearch.WorkplaceSearch**\n\n## elastic.observability\n\n\n<img width=\"30\" src=\"/img/resources/elastic/observability/apm.png\" alt=\"APM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.observability.APM**\n\n<img width=\"30\" src=\"/img/resources/elastic/observability/logs.png\" alt=\"Logs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.observability.Logs**\n\n<img width=\"30\" src=\"/img/resources/elastic/observability/metrics.png\" alt=\"Metrics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.observability.Metrics**\n\n<img width=\"30\" src=\"/img/resources/elastic/observability/observability.png\" alt=\"Observability\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.observability.Observability**\n\n<img width=\"30\" src=\"/img/resources/elastic/observability/uptime.png\" alt=\"Uptime\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.observability.Uptime**\n\n## elastic.orchestration\n\n\n<img width=\"30\" src=\"/img/resources/elastic/orchestration/ece.png\" alt=\"ECE\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.orchestration.ECE**\n\n<img width=\"30\" src=\"/img/resources/elastic/orchestration/eck.png\" alt=\"ECK\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.orchestration.ECK**\n\n## elastic.saas\n\n\n<img width=\"30\" src=\"/img/resources/elastic/saas/cloud.png\" alt=\"Cloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.saas.Cloud**\n\n<img width=\"30\" src=\"/img/resources/elastic/saas/elastic.png\" alt=\"Elastic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.saas.Elastic**\n\n## elastic.security\n\n\n<img width=\"30\" src=\"/img/resources/elastic/security/endpoint.png\" alt=\"Endpoint\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.security.Endpoint**\n\n<img width=\"30\" src=\"/img/resources/elastic/security/security.png\" alt=\"Security\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.security.Security**\n\n<img width=\"30\" src=\"/img/resources/elastic/security/siem.png\" alt=\"SIEM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.security.SIEM**\n\n<img width=\"30\" src=\"/img/resources/elastic/security/xdr.png\" alt=\"Xdr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.elastic.security.Xdr**\n"
  },
  {
    "path": "docs/nodes/firebase.md",
    "content": "---\nid: firebase\ntitle: Firebase\n---\n\nNode classes list of the firebase provider.\n\n## firebase.base\n\n\n<img width=\"30\" src=\"/img/resources/firebase/base/firebase.png\" alt=\"Firebase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.base.Firebase**\n\n## firebase.develop\n\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/authentication.png\" alt=\"Authentication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.Authentication**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/firestore.png\" alt=\"Firestore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.Firestore**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/functions.png\" alt=\"Functions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.Functions**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/hosting.png\" alt=\"Hosting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.Hosting**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/ml-kit.png\" alt=\"MLKit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.MLKit**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/realtime-database.png\" alt=\"RealtimeDatabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.RealtimeDatabase**\n\n<img width=\"30\" src=\"/img/resources/firebase/develop/storage.png\" alt=\"Storage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.develop.Storage**\n\n## firebase.extentions\n\n\n<img width=\"30\" src=\"/img/resources/firebase/extentions/extensions.png\" alt=\"Extensions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.extentions.Extensions**\n\n## firebase.grow\n\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/ab-testing.png\" alt=\"ABTesting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.ABTesting**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/app-indexing.png\" alt=\"AppIndexing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.AppIndexing**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/dynamic-links.png\" alt=\"DynamicLinks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.DynamicLinks**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/in-app-messaging.png\" alt=\"InAppMessaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.InAppMessaging**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/invites.png\" alt=\"Invites\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.Invites**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/messaging.png\" alt=\"Messaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.Messaging**, **FCM** (alias)\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/predictions.png\" alt=\"Predictions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.Predictions**\n\n<img width=\"30\" src=\"/img/resources/firebase/grow/remote-config.png\" alt=\"RemoteConfig\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.grow.RemoteConfig**\n\n## firebase.quality\n\n\n<img width=\"30\" src=\"/img/resources/firebase/quality/app-distribution.png\" alt=\"AppDistribution\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.quality.AppDistribution**\n\n<img width=\"30\" src=\"/img/resources/firebase/quality/crash-reporting.png\" alt=\"CrashReporting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.quality.CrashReporting**\n\n<img width=\"30\" src=\"/img/resources/firebase/quality/crashlytics.png\" alt=\"Crashlytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.quality.Crashlytics**\n\n<img width=\"30\" src=\"/img/resources/firebase/quality/performance-monitoring.png\" alt=\"PerformanceMonitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.quality.PerformanceMonitoring**\n\n<img width=\"30\" src=\"/img/resources/firebase/quality/test-lab.png\" alt=\"TestLab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.firebase.quality.TestLab**\n"
  },
  {
    "path": "docs/nodes/gcp.md",
    "content": "---\nid: gcp\ntitle: GCP\n---\n\nNode classes list of the gcp provider.\n\n## gcp.analytics\n\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/bigquery.png\" alt=\"Bigquery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Bigquery**, **BigQuery** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/composer.png\" alt=\"Composer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Composer**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/data-catalog.png\" alt=\"DataCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.DataCatalog**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/data-fusion.png\" alt=\"DataFusion\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.DataFusion**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/dataflow.png\" alt=\"Dataflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Dataflow**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/datalab.png\" alt=\"Datalab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Datalab**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/dataprep.png\" alt=\"Dataprep\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Dataprep**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/dataproc.png\" alt=\"Dataproc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Dataproc**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/genomics.png\" alt=\"Genomics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Genomics**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/looker.png\" alt=\"Looker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Looker**\n\n<img width=\"30\" src=\"/img/resources/gcp/analytics/pubsub.png\" alt=\"Pubsub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.analytics.Pubsub**, **PubSub** (alias)\n\n## gcp.api\n\n\n<img width=\"30\" src=\"/img/resources/gcp/api/api-gateway.png\" alt=\"APIGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.api.APIGateway**\n\n<img width=\"30\" src=\"/img/resources/gcp/api/apigee.png\" alt=\"Apigee\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.api.Apigee**\n\n<img width=\"30\" src=\"/img/resources/gcp/api/endpoints.png\" alt=\"Endpoints\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.api.Endpoints**\n\n## gcp.compute\n\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/app-engine.png\" alt=\"AppEngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.AppEngine**, **GAE** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/binary-authorization.png\" alt=\"BinaryAuthorization\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.BinaryAuthorization**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/compute-engine.png\" alt=\"ComputeEngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.ComputeEngine**, **GCE** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/container-optimized-os.png\" alt=\"ContainerOptimizedOS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.ContainerOptimizedOS**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/functions.png\" alt=\"Functions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.Functions**, **GCF** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/gke-on-prem.png\" alt=\"GKEOnPrem\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.GKEOnPrem**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/gpu.png\" alt=\"GPU\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.GPU**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/kubernetes-engine.png\" alt=\"KubernetesEngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.KubernetesEngine**, **GKE** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/os-configuration-management.png\" alt=\"OSConfigurationManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.OSConfigurationManagement**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/os-inventory-management.png\" alt=\"OSInventoryManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.OSInventoryManagement**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/os-patch-management.png\" alt=\"OSPatchManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.OSPatchManagement**\n\n<img width=\"30\" src=\"/img/resources/gcp/compute/run.png\" alt=\"Run\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.compute.Run**, **CloudRun** (alias)\n\n## gcp.database\n\n\n<img width=\"30\" src=\"/img/resources/gcp/database/bigtable.png\" alt=\"Bigtable\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.Bigtable**, **BigTable** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/database/datastore.png\" alt=\"Datastore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.Datastore**\n\n<img width=\"30\" src=\"/img/resources/gcp/database/firestore.png\" alt=\"Firestore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.Firestore**\n\n<img width=\"30\" src=\"/img/resources/gcp/database/memorystore.png\" alt=\"Memorystore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.Memorystore**\n\n<img width=\"30\" src=\"/img/resources/gcp/database/spanner.png\" alt=\"Spanner\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.Spanner**\n\n<img width=\"30\" src=\"/img/resources/gcp/database/sql.png\" alt=\"SQL\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.database.SQL**\n\n## gcp.devtools\n\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/build.png\" alt=\"Build\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.Build**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/cloud-shell.png\" alt=\"CloudShell\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.CloudShell**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/code-for-intellij.png\" alt=\"CodeForIntellij\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.CodeForIntellij**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/code.png\" alt=\"Code\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.Code**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/container-registry.png\" alt=\"ContainerRegistry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.ContainerRegistry**, **GCR** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/gradle-app-engine-plugin.png\" alt=\"GradleAppEnginePlugin\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.GradleAppEnginePlugin**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/ide-plugins.png\" alt=\"IdePlugins\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.IdePlugins**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/maven-app-engine-plugin.png\" alt=\"MavenAppEnginePlugin\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.MavenAppEnginePlugin**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/scheduler.png\" alt=\"Scheduler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.Scheduler**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/sdk.png\" alt=\"SDK\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.SDK**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/service-catalog.png\" alt=\"ServiceCatalog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.ServiceCatalog**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/source-repositories.png\" alt=\"SourceRepositories\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.SourceRepositories**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/tasks.png\" alt=\"Tasks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.Tasks**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/test-lab.png\" alt=\"TestLab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.TestLab**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/tools-for-eclipse.png\" alt=\"ToolsForEclipse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.ToolsForEclipse**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/tools-for-powershell.png\" alt=\"ToolsForPowershell\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.ToolsForPowershell**\n\n<img width=\"30\" src=\"/img/resources/gcp/devtools/tools-for-visual-studio.png\" alt=\"ToolsForVisualStudio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.devtools.ToolsForVisualStudio**\n\n## gcp.iot\n\n\n<img width=\"30\" src=\"/img/resources/gcp/iot/iot-core.png\" alt=\"IotCore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.iot.IotCore**\n\n## gcp.management\n\n\n<img width=\"30\" src=\"/img/resources/gcp/management/billing.png\" alt=\"Billing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.management.Billing**\n\n<img width=\"30\" src=\"/img/resources/gcp/management/project.png\" alt=\"Project\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.management.Project**\n\n<img width=\"30\" src=\"/img/resources/gcp/management/quotas.png\" alt=\"Quotas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.management.Quotas**\n\n<img width=\"30\" src=\"/img/resources/gcp/management/support.png\" alt=\"Support\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.management.Support**\n\n## gcp.migration\n\n\n<img width=\"30\" src=\"/img/resources/gcp/migration/migrate-compute-engine.png\" alt=\"MigrateComputeEngine\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.migration.MigrateComputeEngine**, **CE** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/migration/transfer-appliance.png\" alt=\"TransferAppliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.migration.TransferAppliance**\n\n## gcp.ml\n\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/advanced-solutions-lab.png\" alt=\"AdvancedSolutionsLab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AdvancedSolutionsLab**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/ai-hub.png\" alt=\"AIHub\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AIHub**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/ai-platform-data-labeling-service.png\" alt=\"AIPlatformDataLabelingService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AIPlatformDataLabelingService**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/ai-platform.png\" alt=\"AIPlatform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AIPlatform**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl-natural-language.png\" alt=\"AutomlNaturalLanguage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AutomlNaturalLanguage**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl-tables.png\" alt=\"AutomlTables\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AutomlTables**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl-translation.png\" alt=\"AutomlTranslation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AutomlTranslation**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl-video-intelligence.png\" alt=\"AutomlVideoIntelligence\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AutomlVideoIntelligence**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl-vision.png\" alt=\"AutomlVision\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.AutomlVision**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/automl.png\" alt=\"Automl\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.Automl**, **AutoML** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/dialog-flow-enterprise-edition.png\" alt=\"DialogFlowEnterpriseEdition\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.DialogFlowEnterpriseEdition**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/inference-api.png\" alt=\"InferenceAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.InferenceAPI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/jobs-api.png\" alt=\"JobsAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.JobsAPI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/natural-language-api.png\" alt=\"NaturalLanguageAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.NaturalLanguageAPI**, **NLAPI** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/recommendations-ai.png\" alt=\"RecommendationsAI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.RecommendationsAI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/speech-to-text.png\" alt=\"SpeechToText\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.SpeechToText**, **STT** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/text-to-speech.png\" alt=\"TextToSpeech\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.TextToSpeech**, **TTS** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/tpu.png\" alt=\"TPU\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.TPU**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/translation-api.png\" alt=\"TranslationAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.TranslationAPI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/vertex-ai.png\" alt=\"VertexAI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.VertexAI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/video-intelligence-api.png\" alt=\"VideoIntelligenceAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.VideoIntelligenceAPI**\n\n<img width=\"30\" src=\"/img/resources/gcp/ml/vision-api.png\" alt=\"VisionAPI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.ml.VisionAPI**\n\n## gcp.network\n\n\n<img width=\"30\" src=\"/img/resources/gcp/network/armor.png\" alt=\"Armor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.Armor**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/cdn.png\" alt=\"CDN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.CDN**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/cloud-ids.png\" alt=\"CloudIDS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.CloudIDS**, **IDS** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/network/dedicated-interconnect.png\" alt=\"DedicatedInterconnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.DedicatedInterconnect**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/dns.png\" alt=\"DNS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.DNS**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/external-ip-addresses.png\" alt=\"ExternalIpAddresses\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.ExternalIpAddresses**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/firewall-rules.png\" alt=\"FirewallRules\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.FirewallRules**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/load-balancing.png\" alt=\"LoadBalancing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.LoadBalancing**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/nat.png\" alt=\"NAT\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NAT**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network-connectivity-center.png\" alt=\"NetworkConnectivityCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NetworkConnectivityCenter**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network-intelligence-center.png\" alt=\"NetworkIntelligenceCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NetworkIntelligenceCenter**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network-security.png\" alt=\"NetworkSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NetworkSecurity**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network-tiers.png\" alt=\"NetworkTiers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NetworkTiers**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network-topology.png\" alt=\"NetworkTopology\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.NetworkTopology**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/network.png\" alt=\"Network\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.Network**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/partner-interconnect.png\" alt=\"PartnerInterconnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.PartnerInterconnect**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/premium-network-tier.png\" alt=\"PremiumNetworkTier\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.PremiumNetworkTier**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/private-service-connect.png\" alt=\"PrivateServiceConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.PrivateServiceConnect**, **PSC** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/network/router.png\" alt=\"Router\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.Router**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/routes.png\" alt=\"Routes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.Routes**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/service-mesh.png\" alt=\"ServiceMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.ServiceMesh**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/standard-network-tier.png\" alt=\"StandardNetworkTier\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.StandardNetworkTier**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/traffic-director.png\" alt=\"TrafficDirector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.TrafficDirector**\n\n<img width=\"30\" src=\"/img/resources/gcp/network/virtual-private-cloud.png\" alt=\"VirtualPrivateCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.VirtualPrivateCloud**, **VPC** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/network/vpn.png\" alt=\"VPN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.network.VPN**\n\n## gcp.operations\n\n\n<img width=\"30\" src=\"/img/resources/gcp/operations/logging.png\" alt=\"Logging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.operations.Logging**\n\n<img width=\"30\" src=\"/img/resources/gcp/operations/monitoring.png\" alt=\"Monitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.operations.Monitoring**\n\n## gcp.security\n\n\n<img width=\"30\" src=\"/img/resources/gcp/security/access-context-manager.png\" alt=\"AccessContextManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.AccessContextManager**, **ACM** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/security/assured-workloads.png\" alt=\"AssuredWorkloads\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.AssuredWorkloads**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/certificate-authority-service.png\" alt=\"CertificateAuthorityService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.CertificateAuthorityService**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/certificate-manager.png\" alt=\"CertificateManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.CertificateManager**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/cloud-asset-inventory.png\" alt=\"CloudAssetInventory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.CloudAssetInventory**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/iam.png\" alt=\"Iam\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.Iam**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/iap.png\" alt=\"IAP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.IAP**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/key-management-service.png\" alt=\"KeyManagementService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.KeyManagementService**, **KMS** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/security/resource-manager.png\" alt=\"ResourceManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.ResourceManager**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/secret-manager.png\" alt=\"SecretManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.SecretManager**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/security-command-center.png\" alt=\"SecurityCommandCenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.SecurityCommandCenter**, **SCC** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/security/security-health-advisor.png\" alt=\"SecurityHealthAdvisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.SecurityHealthAdvisor**\n\n<img width=\"30\" src=\"/img/resources/gcp/security/security-scanner.png\" alt=\"SecurityScanner\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.security.SecurityScanner**\n\n## gcp.storage\n\n\n<img width=\"30\" src=\"/img/resources/gcp/storage/filestore.png\" alt=\"Filestore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.storage.Filestore**\n\n<img width=\"30\" src=\"/img/resources/gcp/storage/local-ssd.png\" alt=\"LocalSSD\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.storage.LocalSSD**, **SSD** (alias)\n\n<img width=\"30\" src=\"/img/resources/gcp/storage/persistent-disk.png\" alt=\"PersistentDisk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.storage.PersistentDisk**\n\n<img width=\"30\" src=\"/img/resources/gcp/storage/storage.png\" alt=\"Storage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gcp.storage.Storage**, **GCS** (alias)\n"
  },
  {
    "path": "docs/nodes/generic.md",
    "content": "---\nid: generic\ntitle: Generic\n---\n\nNode classes list of the generic provider.\n\n## generic.blank\n\n\n<img width=\"30\" src=\"/img/resources/generic/blank/blank.png\" alt=\"Blank\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.blank.Blank**\n\n## generic.compute\n\n\n<img width=\"30\" src=\"/img/resources/generic/compute/rack.png\" alt=\"Rack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.compute.Rack**\n\n## generic.database\n\n\n<img width=\"30\" src=\"/img/resources/generic/database/sql.png\" alt=\"SQL\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.database.SQL**\n\n## generic.device\n\n\n<img width=\"30\" src=\"/img/resources/generic/device/mobile.png\" alt=\"Mobile\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.device.Mobile**\n\n<img width=\"30\" src=\"/img/resources/generic/device/tablet.png\" alt=\"Tablet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.device.Tablet**\n\n## generic.network\n\n\n<img width=\"30\" src=\"/img/resources/generic/network/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.network.Firewall**\n\n<img width=\"30\" src=\"/img/resources/generic/network/router.png\" alt=\"Router\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.network.Router**\n\n<img width=\"30\" src=\"/img/resources/generic/network/subnet.png\" alt=\"Subnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.network.Subnet**\n\n<img width=\"30\" src=\"/img/resources/generic/network/switch.png\" alt=\"Switch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.network.Switch**\n\n<img width=\"30\" src=\"/img/resources/generic/network/vpn.png\" alt=\"VPN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.network.VPN**\n\n## generic.os\n\n\n<img width=\"30\" src=\"/img/resources/generic/os/android.png\" alt=\"Android\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Android**\n\n<img width=\"30\" src=\"/img/resources/generic/os/centos.png\" alt=\"Centos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Centos**\n\n<img width=\"30\" src=\"/img/resources/generic/os/debian.png\" alt=\"Debian\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Debian**\n\n<img width=\"30\" src=\"/img/resources/generic/os/ios.png\" alt=\"IOS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.IOS**\n\n<img width=\"30\" src=\"/img/resources/generic/os/linux-general.png\" alt=\"LinuxGeneral\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.LinuxGeneral**\n\n<img width=\"30\" src=\"/img/resources/generic/os/raspbian.png\" alt=\"Raspbian\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Raspbian**\n\n<img width=\"30\" src=\"/img/resources/generic/os/red-hat.png\" alt=\"RedHat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.RedHat**\n\n<img width=\"30\" src=\"/img/resources/generic/os/suse.png\" alt=\"Suse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Suse**\n\n<img width=\"30\" src=\"/img/resources/generic/os/ubuntu.png\" alt=\"Ubuntu\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Ubuntu**\n\n<img width=\"30\" src=\"/img/resources/generic/os/windows.png\" alt=\"Windows\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.os.Windows**\n\n## generic.place\n\n\n<img width=\"30\" src=\"/img/resources/generic/place/datacenter.png\" alt=\"Datacenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.place.Datacenter**\n\n## generic.storage\n\n\n<img width=\"30\" src=\"/img/resources/generic/storage/storage.png\" alt=\"Storage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.storage.Storage**\n\n## generic.virtualization\n\n\n<img width=\"30\" src=\"/img/resources/generic/virtualization/qemu.png\" alt=\"Qemu\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.virtualization.Qemu**\n\n<img width=\"30\" src=\"/img/resources/generic/virtualization/virtualbox.png\" alt=\"Virtualbox\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.virtualization.Virtualbox**\n\n<img width=\"30\" src=\"/img/resources/generic/virtualization/vmware.png\" alt=\"Vmware\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.virtualization.Vmware**\n\n<img width=\"30\" src=\"/img/resources/generic/virtualization/xen.png\" alt=\"XEN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.generic.virtualization.XEN**\n"
  },
  {
    "path": "docs/nodes/gis.md",
    "content": "---\nid: gis\ntitle: GIS\n---\n\nNode classes list of the gis provider.\n\n## gis.cli\n\n\n<img width=\"30\" src=\"/img/resources/gis/cli/gdal.png\" alt=\"Gdal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Gdal**\n\n<img width=\"30\" src=\"/img/resources/gis/cli/imposm.png\" alt=\"Imposm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Imposm**\n\n<img width=\"30\" src=\"/img/resources/gis/cli/lastools.png\" alt=\"Lastools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Lastools**\n\n<img width=\"30\" src=\"/img/resources/gis/cli/mapnik.png\" alt=\"Mapnik\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Mapnik**\n\n<img width=\"30\" src=\"/img/resources/gis/cli/mdal.png\" alt=\"Mdal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Mdal**\n\n<img width=\"30\" src=\"/img/resources/gis/cli/pdal.png\" alt=\"Pdal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.cli.Pdal**\n\n## gis.data\n\n\n<img width=\"30\" src=\"/img/resources/gis/data/ban.png\" alt=\"BAN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.data.BAN**\n\n<img width=\"30\" src=\"/img/resources/gis/data/here.png\" alt=\"Here\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.data.Here**\n\n<img width=\"30\" src=\"/img/resources/gis/data/ign.png\" alt=\"IGN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.data.IGN**\n\n<img width=\"30\" src=\"/img/resources/gis/data/openstreetmap.png\" alt=\"Openstreetmap\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.data.Openstreetmap**\n\n<img width=\"30\" src=\"/img/resources/gis/data/overturemaps.png\" alt=\"Overturemaps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.data.Overturemaps**\n\n## gis.database\n\n\n<img width=\"30\" src=\"/img/resources/gis/database/postgis.png\" alt=\"Postgis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.database.Postgis**\n\n## gis.desktop\n\n\n<img width=\"30\" src=\"/img/resources/gis/desktop/maptunik.png\" alt=\"Maptunik\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.desktop.Maptunik**\n\n<img width=\"30\" src=\"/img/resources/gis/desktop/qgis.png\" alt=\"QGIS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.desktop.QGIS**\n\n## gis.format\n\n\n<img width=\"30\" src=\"/img/resources/gis/format/geopackage.png\" alt=\"Geopackage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.format.Geopackage**\n\n<img width=\"30\" src=\"/img/resources/gis/format/geoparquet.png\" alt=\"Geoparquet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.format.Geoparquet**\n\n## gis.geocoding\n\n\n<img width=\"30\" src=\"/img/resources/gis/geocoding/addok.png\" alt=\"Addok\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.geocoding.Addok**\n\n<img width=\"30\" src=\"/img/resources/gis/geocoding/gisgraphy.png\" alt=\"Gisgraphy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.geocoding.Gisgraphy**\n\n<img width=\"30\" src=\"/img/resources/gis/geocoding/nominatim.png\" alt=\"Nominatim\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.geocoding.Nominatim**\n\n<img width=\"30\" src=\"/img/resources/gis/geocoding/pelias.png\" alt=\"Pelias\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.geocoding.Pelias**\n\n## gis.georchestra\n\n\n## gis.java\n\n\n<img width=\"30\" src=\"/img/resources/gis/java/geotools.png\" alt=\"Geotools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.java.Geotools**\n\n## gis.javascript\n\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/cesium.png\" alt=\"Cesium\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Cesium**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/geostyler.png\" alt=\"Geostyler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Geostyler**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/keplerjs.png\" alt=\"Keplerjs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Keplerjs**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/leaflet.png\" alt=\"Leaflet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Leaflet**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/maplibre.png\" alt=\"Maplibre\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Maplibre**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/ol-ext.png\" alt=\"OlExt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.OlExt**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/openlayers.png\" alt=\"Openlayers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Openlayers**\n\n<img width=\"30\" src=\"/img/resources/gis/javascript/turfjs.png\" alt=\"Turfjs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.javascript.Turfjs**\n\n## gis.mobile\n\n\n<img width=\"30\" src=\"/img/resources/gis/mobile/mergin.png\" alt=\"Mergin\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.mobile.Mergin**\n\n<img width=\"30\" src=\"/img/resources/gis/mobile/qfield.png\" alt=\"Qfield\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.mobile.Qfield**\n\n<img width=\"30\" src=\"/img/resources/gis/mobile/smash.png\" alt=\"Smash\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.mobile.Smash**\n\n## gis.ogc\n\n\n<img width=\"30\" src=\"/img/resources/gis/ogc/ogc.png\" alt=\"OGC\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.ogc.OGC**\n\n<img width=\"30\" src=\"/img/resources/gis/ogc/wfs.png\" alt=\"WFS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.ogc.WFS**\n\n<img width=\"30\" src=\"/img/resources/gis/ogc/wms.png\" alt=\"WMS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.ogc.WMS**\n\n## gis.organization\n\n\n<img width=\"30\" src=\"/img/resources/gis/organization/osgeo.png\" alt=\"Osgeo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.organization.Osgeo**\n\n## gis.python\n\n\n<img width=\"30\" src=\"/img/resources/gis/python/geopandas.png\" alt=\"Geopandas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.python.Geopandas**\n\n<img width=\"30\" src=\"/img/resources/gis/python/pysal.png\" alt=\"Pysal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.python.Pysal**\n\n## gis.routing\n\n\n<img width=\"30\" src=\"/img/resources/gis/routing/graphhopper.png\" alt=\"Graphhopper\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.routing.Graphhopper**\n\n<img width=\"30\" src=\"/img/resources/gis/routing/osrm.png\" alt=\"Osrm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.routing.Osrm**\n\n<img width=\"30\" src=\"/img/resources/gis/routing/pgrouting.png\" alt=\"Pgrouting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.routing.Pgrouting**\n\n<img width=\"30\" src=\"/img/resources/gis/routing/valhalla.png\" alt=\"Valhalla\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.routing.Valhalla**\n\n## gis.server\n\n\n<img width=\"30\" src=\"/img/resources/gis/server/actinia.png\" alt=\"Actinia\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Actinia**\n\n<img width=\"30\" src=\"/img/resources/gis/server/baremaps.png\" alt=\"Baremaps\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Baremaps**\n\n<img width=\"30\" src=\"/img/resources/gis/server/deegree.png\" alt=\"Deegree\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Deegree**\n\n<img width=\"30\" src=\"/img/resources/gis/server/g3w-suite.png\" alt=\"G3WSuite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.G3WSuite**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geohealthcheck.png\" alt=\"Geohealthcheck\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geohealthcheck**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geomapfish.png\" alt=\"Geomapfish\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geomapfish**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geomesa.png\" alt=\"Geomesa\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geomesa**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geonetwork.png\" alt=\"Geonetwork\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geonetwork**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geonode.png\" alt=\"Geonode\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geonode**\n\n<img width=\"30\" src=\"/img/resources/gis/server/georchestra.png\" alt=\"Georchestra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Georchestra**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geoserver.png\" alt=\"Geoserver\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geoserver**\n\n<img width=\"30\" src=\"/img/resources/gis/server/geowebcache.png\" alt=\"Geowebcache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Geowebcache**\n\n<img width=\"30\" src=\"/img/resources/gis/server/kepler.png\" alt=\"Kepler\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Kepler**\n\n<img width=\"30\" src=\"/img/resources/gis/server/mapproxy.png\" alt=\"Mapproxy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Mapproxy**\n\n<img width=\"30\" src=\"/img/resources/gis/server/mapserver.png\" alt=\"Mapserver\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Mapserver**\n\n<img width=\"30\" src=\"/img/resources/gis/server/mapstore.png\" alt=\"Mapstore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Mapstore**\n\n<img width=\"30\" src=\"/img/resources/gis/server/mviewer.png\" alt=\"Mviewer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Mviewer**\n\n<img width=\"30\" src=\"/img/resources/gis/server/pg_tileserv.png\" alt=\"Pg_Tileserv\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Pg_Tileserv**\n\n<img width=\"30\" src=\"/img/resources/gis/server/pycsw.png\" alt=\"Pycsw\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Pycsw**\n\n<img width=\"30\" src=\"/img/resources/gis/server/pygeoapi.png\" alt=\"Pygeoapi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Pygeoapi**\n\n<img width=\"30\" src=\"/img/resources/gis/server/qgis-server.png\" alt=\"QGISServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.QGISServer**\n\n<img width=\"30\" src=\"/img/resources/gis/server/zooproject.png\" alt=\"Zooproject\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.gis.server.Zooproject**\n"
  },
  {
    "path": "docs/nodes/ibm.md",
    "content": "---\nid: ibm\ntitle: IBM\n---\n\nNode classes list of the ibm provider.\n\n## ibm.analytics\n\n\n<img width=\"30\" src=\"/img/resources/ibm/analytics/analytics.png\" alt=\"Analytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.analytics.Analytics**\n\n<img width=\"30\" src=\"/img/resources/ibm/analytics/data-integration.png\" alt=\"DataIntegration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.analytics.DataIntegration**\n\n<img width=\"30\" src=\"/img/resources/ibm/analytics/data-repositories.png\" alt=\"DataRepositories\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.analytics.DataRepositories**\n\n<img width=\"30\" src=\"/img/resources/ibm/analytics/device-analytics.png\" alt=\"DeviceAnalytics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.analytics.DeviceAnalytics**\n\n<img width=\"30\" src=\"/img/resources/ibm/analytics/streaming-computing.png\" alt=\"StreamingComputing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.analytics.StreamingComputing**\n\n## ibm.applications\n\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/actionable-insight.png\" alt=\"ActionableInsight\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.ActionableInsight**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/annotate.png\" alt=\"Annotate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.Annotate**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/api-developer-portal.png\" alt=\"ApiDeveloperPortal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.ApiDeveloperPortal**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/api-polyglot-runtimes.png\" alt=\"ApiPolyglotRuntimes\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.ApiPolyglotRuntimes**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/app-server.png\" alt=\"AppServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.AppServer**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/application-logic.png\" alt=\"ApplicationLogic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.ApplicationLogic**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/enterprise-applications.png\" alt=\"EnterpriseApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.EnterpriseApplications**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/index.png\" alt=\"Index\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.Index**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/iot-application.png\" alt=\"IotApplication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.IotApplication**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/microservice.png\" alt=\"Microservice\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.Microservice**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/mobile-app.png\" alt=\"MobileApp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.MobileApp**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/ontology.png\" alt=\"Ontology\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.Ontology**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/open-source-tools.png\" alt=\"OpenSourceTools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.OpenSourceTools**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/runtime-services.png\" alt=\"RuntimeServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.RuntimeServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/saas-applications.png\" alt=\"SaasApplications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.SaasApplications**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/service-broker.png\" alt=\"ServiceBroker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.ServiceBroker**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/speech-to-text.png\" alt=\"SpeechToText\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.SpeechToText**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/visual-recognition.png\" alt=\"VisualRecognition\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.VisualRecognition**\n\n<img width=\"30\" src=\"/img/resources/ibm/applications/visualization.png\" alt=\"Visualization\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.applications.Visualization**\n\n## ibm.blockchain\n\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/blockchain-developer.png\" alt=\"BlockchainDeveloper\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.BlockchainDeveloper**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/blockchain.png\" alt=\"Blockchain\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Blockchain**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/certificate-authority.png\" alt=\"CertificateAuthority\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.CertificateAuthority**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/client-application.png\" alt=\"ClientApplication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.ClientApplication**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/communication.png\" alt=\"Communication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Communication**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/consensus.png\" alt=\"Consensus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Consensus**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/event-listener.png\" alt=\"EventListener\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.EventListener**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/event.png\" alt=\"Event\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Event**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/existing-enterprise-systems.png\" alt=\"ExistingEnterpriseSystems\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.ExistingEnterpriseSystems**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/hyperledger-fabric.png\" alt=\"HyperledgerFabric\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.HyperledgerFabric**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/key-management.png\" alt=\"KeyManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.KeyManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/ledger.png\" alt=\"Ledger\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Ledger**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/membership-services-provider-api.png\" alt=\"MembershipServicesProviderApi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.MembershipServicesProviderApi**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/membership.png\" alt=\"Membership\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Membership**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/message-bus.png\" alt=\"MessageBus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.MessageBus**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/node.png\" alt=\"Node\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Node**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/services.png\" alt=\"Services\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Services**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/smart-contract.png\" alt=\"SmartContract\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.SmartContract**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/transaction-manager.png\" alt=\"TransactionManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.TransactionManager**\n\n<img width=\"30\" src=\"/img/resources/ibm/blockchain/wallet.png\" alt=\"Wallet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.blockchain.Wallet**\n\n## ibm.compute\n\n\n<img width=\"30\" src=\"/img/resources/ibm/compute/bare-metal-server.png\" alt=\"BareMetalServer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.compute.BareMetalServer**\n\n<img width=\"30\" src=\"/img/resources/ibm/compute/image-service.png\" alt=\"ImageService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.compute.ImageService**\n\n<img width=\"30\" src=\"/img/resources/ibm/compute/instance.png\" alt=\"Instance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.compute.Instance**\n\n<img width=\"30\" src=\"/img/resources/ibm/compute/key.png\" alt=\"Key\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.compute.Key**\n\n<img width=\"30\" src=\"/img/resources/ibm/compute/power-instance.png\" alt=\"PowerInstance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.compute.PowerInstance**\n\n## ibm.data\n\n\n<img width=\"30\" src=\"/img/resources/ibm/data/caches.png\" alt=\"Caches\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.Caches**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/cloud.png\" alt=\"Cloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.Cloud**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/conversation-trained-deployed.png\" alt=\"ConversationTrainedDeployed\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.ConversationTrainedDeployed**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/data-services.png\" alt=\"DataServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.DataServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/data-sources.png\" alt=\"DataSources\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.DataSources**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/device-identity-service.png\" alt=\"DeviceIdentityService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.DeviceIdentityService**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/device-registry.png\" alt=\"DeviceRegistry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.DeviceRegistry**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/enterprise-data.png\" alt=\"EnterpriseData\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.EnterpriseData**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/enterprise-user-directory.png\" alt=\"EnterpriseUserDirectory\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.EnterpriseUserDirectory**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/file-repository.png\" alt=\"FileRepository\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.FileRepository**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/ground-truth.png\" alt=\"GroundTruth\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.GroundTruth**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/model.png\" alt=\"Model\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.Model**\n\n<img width=\"30\" src=\"/img/resources/ibm/data/tms-data-interface.png\" alt=\"TmsDataInterface\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.data.TmsDataInterface**\n\n## ibm.devops\n\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/artifact-management.png\" alt=\"ArtifactManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.ArtifactManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/build-test.png\" alt=\"BuildTest\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.BuildTest**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/code-editor.png\" alt=\"CodeEditor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.CodeEditor**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/collaborative-development.png\" alt=\"CollaborativeDevelopment\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.CollaborativeDevelopment**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/configuration-management.png\" alt=\"ConfigurationManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.ConfigurationManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/continuous-deploy.png\" alt=\"ContinuousDeploy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.ContinuousDeploy**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/continuous-testing.png\" alt=\"ContinuousTesting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.ContinuousTesting**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/devops.png\" alt=\"Devops\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.Devops**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/provision.png\" alt=\"Provision\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.Provision**\n\n<img width=\"30\" src=\"/img/resources/ibm/devops/release-management.png\" alt=\"ReleaseManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.devops.ReleaseManagement**\n\n## ibm.general\n\n\n<img width=\"30\" src=\"/img/resources/ibm/general/cloud-messaging.png\" alt=\"CloudMessaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.CloudMessaging**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/cloud-services.png\" alt=\"CloudServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.CloudServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/cloudant.png\" alt=\"Cloudant\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Cloudant**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/cognitive-services.png\" alt=\"CognitiveServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.CognitiveServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/data-security.png\" alt=\"DataSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.DataSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/enterprise.png\" alt=\"Enterprise\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Enterprise**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/governance-risk-compliance.png\" alt=\"GovernanceRiskCompliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.GovernanceRiskCompliance**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/ibm-containers.png\" alt=\"IBMContainers\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.IBMContainers**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/ibm-public-cloud.png\" alt=\"IBMPublicCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.IBMPublicCloud**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/identity-access-management.png\" alt=\"IdentityAccessManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.IdentityAccessManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/identity-provider.png\" alt=\"IdentityProvider\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.IdentityProvider**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/infrastructure-security.png\" alt=\"InfrastructureSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.InfrastructureSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/internet.png\" alt=\"Internet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Internet**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/iot-cloud.png\" alt=\"IotCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.IotCloud**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/microservices-application.png\" alt=\"MicroservicesApplication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.MicroservicesApplication**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/microservices-mesh.png\" alt=\"MicroservicesMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.MicroservicesMesh**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/monitoring-logging.png\" alt=\"MonitoringLogging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.MonitoringLogging**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/monitoring.png\" alt=\"Monitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Monitoring**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/object-storage.png\" alt=\"ObjectStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.ObjectStorage**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/offline-capabilities.png\" alt=\"OfflineCapabilities\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.OfflineCapabilities**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/openwhisk.png\" alt=\"Openwhisk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Openwhisk**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/peer-cloud.png\" alt=\"PeerCloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.PeerCloud**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/retrieve-rank.png\" alt=\"RetrieveRank\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.RetrieveRank**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/scalable.png\" alt=\"Scalable\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.Scalable**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/service-discovery-configuration.png\" alt=\"ServiceDiscoveryConfiguration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.ServiceDiscoveryConfiguration**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/text-to-speech.png\" alt=\"TextToSpeech\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.TextToSpeech**\n\n<img width=\"30\" src=\"/img/resources/ibm/general/transformation-connectivity.png\" alt=\"TransformationConnectivity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.general.TransformationConnectivity**\n\n## ibm.infrastructure\n\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/channels.png\" alt=\"Channels\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.Channels**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/cloud-messaging.png\" alt=\"CloudMessaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.CloudMessaging**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/dashboard.png\" alt=\"Dashboard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.Dashboard**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/diagnostics.png\" alt=\"Diagnostics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.Diagnostics**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/edge-services.png\" alt=\"EdgeServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.EdgeServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/enterprise-messaging.png\" alt=\"EnterpriseMessaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.EnterpriseMessaging**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/event-feed.png\" alt=\"EventFeed\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.EventFeed**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/infrastructure-services.png\" alt=\"InfrastructureServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.InfrastructureServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/interservice-communication.png\" alt=\"InterserviceCommunication\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.InterserviceCommunication**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/load-balancing-routing.png\" alt=\"LoadBalancingRouting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.LoadBalancingRouting**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/microservices-mesh.png\" alt=\"MicroservicesMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.MicroservicesMesh**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/mobile-backend.png\" alt=\"MobileBackend\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.MobileBackend**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/mobile-provider-network.png\" alt=\"MobileProviderNetwork\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.MobileProviderNetwork**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/monitoring-logging.png\" alt=\"MonitoringLogging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.MonitoringLogging**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/monitoring.png\" alt=\"Monitoring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.Monitoring**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/peer-services.png\" alt=\"PeerServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.PeerServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/service-discovery-configuration.png\" alt=\"ServiceDiscoveryConfiguration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.ServiceDiscoveryConfiguration**\n\n<img width=\"30\" src=\"/img/resources/ibm/infrastructure/transformation-connectivity.png\" alt=\"TransformationConnectivity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.infrastructure.TransformationConnectivity**\n\n## ibm.management\n\n\n<img width=\"30\" src=\"/img/resources/ibm/management/alert-notification.png\" alt=\"AlertNotification\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.AlertNotification**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/api-management.png\" alt=\"ApiManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ApiManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/cloud-management.png\" alt=\"CloudManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.CloudManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/cluster-management.png\" alt=\"ClusterManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ClusterManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/content-management.png\" alt=\"ContentManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ContentManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/data-services.png\" alt=\"DataServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.DataServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/device-management.png\" alt=\"DeviceManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.DeviceManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/information-governance.png\" alt=\"InformationGovernance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.InformationGovernance**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/it-service-management.png\" alt=\"ItServiceManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ItServiceManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/management.png\" alt=\"Management\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.Management**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/monitoring-metrics.png\" alt=\"MonitoringMetrics\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.MonitoringMetrics**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/process-management.png\" alt=\"ProcessManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ProcessManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/provider-cloud-portal-service.png\" alt=\"ProviderCloudPortalService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ProviderCloudPortalService**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/push-notifications.png\" alt=\"PushNotifications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.PushNotifications**\n\n<img width=\"30\" src=\"/img/resources/ibm/management/service-management-tools.png\" alt=\"ServiceManagementTools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.management.ServiceManagementTools**\n\n## ibm.network\n\n\n<img width=\"30\" src=\"/img/resources/ibm/network/bridge.png\" alt=\"Bridge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Bridge**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/direct-link.png\" alt=\"DirectLink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.DirectLink**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/enterprise.png\" alt=\"Enterprise\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Enterprise**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Firewall**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/floating-ip.png\" alt=\"FloatingIp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.FloatingIp**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/gateway.png\" alt=\"Gateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Gateway**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/internet-services.png\" alt=\"InternetServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.InternetServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/load-balancer-listener.png\" alt=\"LoadBalancerListener\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.LoadBalancerListener**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/load-balancer-pool.png\" alt=\"LoadBalancerPool\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.LoadBalancerPool**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/load-balancer.png\" alt=\"LoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.LoadBalancer**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/load-balancing-routing.png\" alt=\"LoadBalancingRouting\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.LoadBalancingRouting**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/public-gateway.png\" alt=\"PublicGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.PublicGateway**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/region.png\" alt=\"Region\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Region**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/router.png\" alt=\"Router\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Router**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/rules.png\" alt=\"Rules\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Rules**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/subnet.png\" alt=\"Subnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Subnet**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/transit-gateway.png\" alt=\"TransitGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.TransitGateway**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/vpc.png\" alt=\"Vpc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.Vpc**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/vpn-connection.png\" alt=\"VpnConnection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.VpnConnection**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/vpn-gateway.png\" alt=\"VpnGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.VpnGateway**\n\n<img width=\"30\" src=\"/img/resources/ibm/network/vpn-policy.png\" alt=\"VpnPolicy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.network.VpnPolicy**\n\n## ibm.security\n\n\n<img width=\"30\" src=\"/img/resources/ibm/security/api-security.png\" alt=\"ApiSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.ApiSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/blockchain-security-service.png\" alt=\"BlockchainSecurityService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.BlockchainSecurityService**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/data-security.png\" alt=\"DataSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.DataSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.Firewall**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/gateway.png\" alt=\"Gateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.Gateway**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/governance-risk-compliance.png\" alt=\"GovernanceRiskCompliance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.GovernanceRiskCompliance**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/identity-access-management.png\" alt=\"IdentityAccessManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.IdentityAccessManagement**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/identity-provider.png\" alt=\"IdentityProvider\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.IdentityProvider**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/infrastructure-security.png\" alt=\"InfrastructureSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.InfrastructureSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/physical-security.png\" alt=\"PhysicalSecurity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.PhysicalSecurity**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/security-monitoring-intelligence.png\" alt=\"SecurityMonitoringIntelligence\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.SecurityMonitoringIntelligence**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/security-services.png\" alt=\"SecurityServices\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.SecurityServices**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/trustend-computing.png\" alt=\"TrustendComputing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.TrustendComputing**\n\n<img width=\"30\" src=\"/img/resources/ibm/security/vpn.png\" alt=\"Vpn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.security.Vpn**\n\n## ibm.social\n\n\n<img width=\"30\" src=\"/img/resources/ibm/social/communities.png\" alt=\"Communities\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.social.Communities**\n\n<img width=\"30\" src=\"/img/resources/ibm/social/file-sync.png\" alt=\"FileSync\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.social.FileSync**\n\n<img width=\"30\" src=\"/img/resources/ibm/social/live-collaboration.png\" alt=\"LiveCollaboration\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.social.LiveCollaboration**\n\n<img width=\"30\" src=\"/img/resources/ibm/social/messaging.png\" alt=\"Messaging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.social.Messaging**\n\n<img width=\"30\" src=\"/img/resources/ibm/social/networking.png\" alt=\"Networking\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.social.Networking**\n\n## ibm.storage\n\n\n<img width=\"30\" src=\"/img/resources/ibm/storage/block-storage.png\" alt=\"BlockStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.storage.BlockStorage**\n\n<img width=\"30\" src=\"/img/resources/ibm/storage/object-storage.png\" alt=\"ObjectStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.storage.ObjectStorage**\n\n## ibm.user\n\n\n<img width=\"30\" src=\"/img/resources/ibm/user/browser.png\" alt=\"Browser\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.Browser**\n\n<img width=\"30\" src=\"/img/resources/ibm/user/device.png\" alt=\"Device\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.Device**\n\n<img width=\"30\" src=\"/img/resources/ibm/user/integrated-digital-experiences.png\" alt=\"IntegratedDigitalExperiences\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.IntegratedDigitalExperiences**\n\n<img width=\"30\" src=\"/img/resources/ibm/user/physical-entity.png\" alt=\"PhysicalEntity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.PhysicalEntity**\n\n<img width=\"30\" src=\"/img/resources/ibm/user/sensor.png\" alt=\"Sensor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.Sensor**\n\n<img width=\"30\" src=\"/img/resources/ibm/user/user.png\" alt=\"User\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.ibm.user.User**\n"
  },
  {
    "path": "docs/nodes/k8s.md",
    "content": "---\nid: k8s\ntitle: K8S\n---\n\nNode classes list of the k8s provider.\n\n## k8s.chaos\n\n\n<img width=\"30\" src=\"/img/resources/k8s/chaos/chaos-mesh.png\" alt=\"ChaosMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.chaos.ChaosMesh**\n\n<img width=\"30\" src=\"/img/resources/k8s/chaos/litmus-chaos.png\" alt=\"LitmusChaos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.chaos.LitmusChaos**\n\n## k8s.clusterconfig\n\n\n<img width=\"30\" src=\"/img/resources/k8s/clusterconfig/hpa.png\" alt=\"HPA\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.clusterconfig.HPA**, **HorizontalPodAutoscaler** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/clusterconfig/limits.png\" alt=\"Limits\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.clusterconfig.Limits**, **LimitRange** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/clusterconfig/quota.png\" alt=\"Quota\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.clusterconfig.Quota**\n\n## k8s.compute\n\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/cronjob.png\" alt=\"Cronjob\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.Cronjob**\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/deploy.png\" alt=\"Deploy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.Deploy**, **Deployment** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/ds.png\" alt=\"DS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.DS**, **DaemonSet** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/job.png\" alt=\"Job\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.Job**\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/pod.png\" alt=\"Pod\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.Pod**\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/rs.png\" alt=\"RS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.RS**, **ReplicaSet** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/compute/sts.png\" alt=\"STS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.compute.STS**, **StatefulSet** (alias)\n\n## k8s.controlplane\n\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/api.png\" alt=\"API\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.API**, **APIServer** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/c-c-m.png\" alt=\"CCM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.CCM**\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/c-m.png\" alt=\"CM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.CM**, **ControllerManager** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/k-proxy.png\" alt=\"KProxy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.KProxy**, **KubeProxy** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/kubelet.png\" alt=\"Kubelet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.Kubelet**\n\n<img width=\"30\" src=\"/img/resources/k8s/controlplane/sched.png\" alt=\"Sched\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.controlplane.Sched**, **Scheduler** (alias)\n\n## k8s.ecosystem\n\n\n<img width=\"30\" src=\"/img/resources/k8s/ecosystem/external-dns.png\" alt=\"ExternalDns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.ecosystem.ExternalDns**\n\n<img width=\"30\" src=\"/img/resources/k8s/ecosystem/helm.png\" alt=\"Helm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.ecosystem.Helm**\n\n<img width=\"30\" src=\"/img/resources/k8s/ecosystem/krew.png\" alt=\"Krew\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.ecosystem.Krew**\n\n<img width=\"30\" src=\"/img/resources/k8s/ecosystem/kustomize.png\" alt=\"Kustomize\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.ecosystem.Kustomize**\n\n## k8s.group\n\n\n<img width=\"30\" src=\"/img/resources/k8s/group/ns.png\" alt=\"NS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.group.NS**, **Namespace** (alias)\n\n## k8s.infra\n\n\n<img width=\"30\" src=\"/img/resources/k8s/infra/etcd.png\" alt=\"ETCD\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.infra.ETCD**\n\n<img width=\"30\" src=\"/img/resources/k8s/infra/master.png\" alt=\"Master\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.infra.Master**\n\n<img width=\"30\" src=\"/img/resources/k8s/infra/node.png\" alt=\"Node\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.infra.Node**\n\n## k8s.network\n\n\n<img width=\"30\" src=\"/img/resources/k8s/network/ep.png\" alt=\"Ep\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.network.Ep**, **Endpoint** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/network/ing.png\" alt=\"Ing\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.network.Ing**, **Ingress** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/network/netpol.png\" alt=\"Netpol\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.network.Netpol**, **NetworkPolicy** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/network/svc.png\" alt=\"SVC\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.network.SVC**, **Service** (alias)\n\n## k8s.others\n\n\n<img width=\"30\" src=\"/img/resources/k8s/others/crd.png\" alt=\"CRD\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.others.CRD**\n\n<img width=\"30\" src=\"/img/resources/k8s/others/psp.png\" alt=\"PSP\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.others.PSP**\n\n## k8s.podconfig\n\n\n<img width=\"30\" src=\"/img/resources/k8s/podconfig/cm.png\" alt=\"CM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.podconfig.CM**, **ConfigMap** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/podconfig/secret.png\" alt=\"Secret\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.podconfig.Secret**\n\n## k8s.rbac\n\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/c-role.png\" alt=\"CRole\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.CRole**, **ClusterRole** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/crb.png\" alt=\"CRB\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.CRB**, **ClusterRoleBinding** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/group.png\" alt=\"Group\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.Group**\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/rb.png\" alt=\"RB\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.RB**, **RoleBinding** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/role.png\" alt=\"Role\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.Role**\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/sa.png\" alt=\"SA\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.SA**, **ServiceAccount** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/rbac/user.png\" alt=\"User\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.rbac.User**\n\n## k8s.storage\n\n\n<img width=\"30\" src=\"/img/resources/k8s/storage/pv.png\" alt=\"PV\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.storage.PV**, **PersistentVolume** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/storage/pvc.png\" alt=\"PVC\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.storage.PVC**, **PersistentVolumeClaim** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/storage/sc.png\" alt=\"SC\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.storage.SC**, **StorageClass** (alias)\n\n<img width=\"30\" src=\"/img/resources/k8s/storage/vol.png\" alt=\"Vol\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.k8s.storage.Vol**, **Volume** (alias)\n"
  },
  {
    "path": "docs/nodes/oci.md",
    "content": "---\nid: oci\ntitle: OCI\n---\n\nNode classes list of the oci provider.\n\n## oci.compute\n\n\n<img width=\"30\" src=\"/img/resources/oci/compute/autoscale-white.png\" alt=\"AutoscaleWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.AutoscaleWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/autoscale.png\" alt=\"Autoscale\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.Autoscale**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/bm-white.png\" alt=\"BMWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.BMWhite**, **BareMetalWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/bm.png\" alt=\"BM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.BM**, **BareMetal** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/container-white.png\" alt=\"ContainerWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.ContainerWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/container.png\" alt=\"Container\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.Container**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/functions-white.png\" alt=\"FunctionsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.FunctionsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/functions.png\" alt=\"Functions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.Functions**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/instance-pools-white.png\" alt=\"InstancePoolsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.InstancePoolsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/instance-pools.png\" alt=\"InstancePools\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.InstancePools**\n\n<img width=\"30\" src=\"/img/resources/oci/compute/ocir-white.png\" alt=\"OCIRWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.OCIRWhite**, **OCIRegistryWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/ocir.png\" alt=\"OCIR\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.OCIR**, **OCIRegistry** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/oke-white.png\" alt=\"OKEWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.OKEWhite**, **ContainerEngineWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/oke.png\" alt=\"OKE\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.OKE**, **ContainerEngine** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/vm-white.png\" alt=\"VMWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.VMWhite**, **VirtualMachineWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/compute/vm.png\" alt=\"VM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.compute.VM**, **VirtualMachine** (alias)\n\n## oci.connectivity\n\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/backbone-white.png\" alt=\"BackboneWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.BackboneWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/backbone.png\" alt=\"Backbone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.Backbone**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/cdn-white.png\" alt=\"CDNWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CDNWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/cdn.png\" alt=\"CDN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CDN**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/customer-datacenter.png\" alt=\"CustomerDatacenter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CustomerDatacenter**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/customer-datacntr-white.png\" alt=\"CustomerDatacntrWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CustomerDatacntrWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/customer-premises-white.png\" alt=\"CustomerPremisesWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CustomerPremisesWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/customer-premises.png\" alt=\"CustomerPremises\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.CustomerPremises**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/disconnected-regions-white.png\" alt=\"DisconnectedRegionsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.DisconnectedRegionsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/disconnected-regions.png\" alt=\"DisconnectedRegions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.DisconnectedRegions**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/dns-white.png\" alt=\"DNSWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.DNSWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/dns.png\" alt=\"DNS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.DNS**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/fast-connect-white.png\" alt=\"FastConnectWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.FastConnectWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/fast-connect.png\" alt=\"FastConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.FastConnect**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/nat-gateway-white.png\" alt=\"NATGatewayWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.NATGatewayWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/nat-gateway.png\" alt=\"NATGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.NATGateway**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/vpn-white.png\" alt=\"VPNWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.VPNWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/connectivity/vpn.png\" alt=\"VPN\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.connectivity.VPN**\n\n## oci.database\n\n\n<img width=\"30\" src=\"/img/resources/oci/database/autonomous-white.png\" alt=\"AutonomousWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.AutonomousWhite**, **ADBWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/database/autonomous.png\" alt=\"Autonomous\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.Autonomous**, **ADB** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/database/bigdata-service-white.png\" alt=\"BigdataServiceWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.BigdataServiceWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/bigdata-service.png\" alt=\"BigdataService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.BigdataService**\n\n<img width=\"30\" src=\"/img/resources/oci/database/database-service-white.png\" alt=\"DatabaseServiceWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DatabaseServiceWhite**, **DBServiceWhite** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/database/database-service.png\" alt=\"DatabaseService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DatabaseService**, **DBService** (alias)\n\n<img width=\"30\" src=\"/img/resources/oci/database/dataflow-apache-white.png\" alt=\"DataflowApacheWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DataflowApacheWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dataflow-apache.png\" alt=\"DataflowApache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DataflowApache**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dcat-white.png\" alt=\"DcatWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DcatWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dcat.png\" alt=\"Dcat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.Dcat**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dis-white.png\" alt=\"DisWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DisWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dis.png\" alt=\"Dis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.Dis**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dms-white.png\" alt=\"DMSWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DMSWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/dms.png\" alt=\"DMS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.DMS**\n\n<img width=\"30\" src=\"/img/resources/oci/database/science-white.png\" alt=\"ScienceWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.ScienceWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/science.png\" alt=\"Science\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.Science**\n\n<img width=\"30\" src=\"/img/resources/oci/database/stream-white.png\" alt=\"StreamWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.StreamWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/database/stream.png\" alt=\"Stream\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.database.Stream**\n\n## oci.devops\n\n\n<img width=\"30\" src=\"/img/resources/oci/devops/api-gateway-white.png\" alt=\"APIGatewayWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.APIGatewayWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/devops/api-gateway.png\" alt=\"APIGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.APIGateway**\n\n<img width=\"30\" src=\"/img/resources/oci/devops/api-service-white.png\" alt=\"APIServiceWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.APIServiceWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/devops/api-service.png\" alt=\"APIService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.APIService**\n\n<img width=\"30\" src=\"/img/resources/oci/devops/resource-mgmt-white.png\" alt=\"ResourceMgmtWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.ResourceMgmtWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/devops/resource-mgmt.png\" alt=\"ResourceMgmt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.devops.ResourceMgmt**\n\n## oci.governance\n\n\n<img width=\"30\" src=\"/img/resources/oci/governance/audit-white.png\" alt=\"AuditWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.AuditWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/audit.png\" alt=\"Audit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Audit**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/compartments-white.png\" alt=\"CompartmentsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.CompartmentsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/compartments.png\" alt=\"Compartments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Compartments**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/groups-white.png\" alt=\"GroupsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.GroupsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/groups.png\" alt=\"Groups\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Groups**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/logging-white.png\" alt=\"LoggingWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.LoggingWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/logging.png\" alt=\"Logging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Logging**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/ocid-white.png\" alt=\"OCIDWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.OCIDWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/ocid.png\" alt=\"OCID\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.OCID**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/policies-white.png\" alt=\"PoliciesWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.PoliciesWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/policies.png\" alt=\"Policies\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Policies**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/tagging-white.png\" alt=\"TaggingWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.TaggingWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/governance/tagging.png\" alt=\"Tagging\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.governance.Tagging**\n\n## oci.monitoring\n\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/alarm-white.png\" alt=\"AlarmWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.AlarmWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/alarm.png\" alt=\"Alarm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Alarm**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/email-white.png\" alt=\"EmailWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.EmailWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/email.png\" alt=\"Email\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Email**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/events-white.png\" alt=\"EventsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.EventsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/events.png\" alt=\"Events\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Events**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/health-check-white.png\" alt=\"HealthCheckWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.HealthCheckWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/health-check.png\" alt=\"HealthCheck\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.HealthCheck**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/notifications-white.png\" alt=\"NotificationsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.NotificationsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/notifications.png\" alt=\"Notifications\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Notifications**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/queue-white.png\" alt=\"QueueWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.QueueWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/queue.png\" alt=\"Queue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Queue**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/search-white.png\" alt=\"SearchWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.SearchWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/search.png\" alt=\"Search\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Search**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/telemetry-white.png\" alt=\"TelemetryWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.TelemetryWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/telemetry.png\" alt=\"Telemetry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Telemetry**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/workflow-white.png\" alt=\"WorkflowWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.WorkflowWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/monitoring/workflow.png\" alt=\"Workflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.monitoring.Workflow**\n\n## oci.network\n\n\n<img width=\"30\" src=\"/img/resources/oci/network/drg-white.png\" alt=\"DrgWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.DrgWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/drg.png\" alt=\"Drg\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.Drg**\n\n<img width=\"30\" src=\"/img/resources/oci/network/firewall-white.png\" alt=\"FirewallWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.FirewallWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.Firewall**\n\n<img width=\"30\" src=\"/img/resources/oci/network/internet-gateway-white.png\" alt=\"InternetGatewayWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.InternetGatewayWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/internet-gateway.png\" alt=\"InternetGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.InternetGateway**\n\n<img width=\"30\" src=\"/img/resources/oci/network/load-balancer-white.png\" alt=\"LoadBalancerWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.LoadBalancerWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/load-balancer.png\" alt=\"LoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.LoadBalancer**\n\n<img width=\"30\" src=\"/img/resources/oci/network/route-table-white.png\" alt=\"RouteTableWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.RouteTableWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/route-table.png\" alt=\"RouteTable\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.RouteTable**\n\n<img width=\"30\" src=\"/img/resources/oci/network/security-lists-white.png\" alt=\"SecurityListsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.SecurityListsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/security-lists.png\" alt=\"SecurityLists\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.SecurityLists**\n\n<img width=\"30\" src=\"/img/resources/oci/network/service-gateway-white.png\" alt=\"ServiceGatewayWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.ServiceGatewayWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/service-gateway.png\" alt=\"ServiceGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.ServiceGateway**\n\n<img width=\"30\" src=\"/img/resources/oci/network/vcn-white.png\" alt=\"VcnWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.VcnWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/network/vcn.png\" alt=\"Vcn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.network.Vcn**\n\n## oci.security\n\n\n<img width=\"30\" src=\"/img/resources/oci/security/cloud-guard-white.png\" alt=\"CloudGuardWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.CloudGuardWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/cloud-guard.png\" alt=\"CloudGuard\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.CloudGuard**\n\n<img width=\"30\" src=\"/img/resources/oci/security/ddos-white.png\" alt=\"DDOSWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.DDOSWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/ddos.png\" alt=\"DDOS\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.DDOS**\n\n<img width=\"30\" src=\"/img/resources/oci/security/encryption-white.png\" alt=\"EncryptionWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.EncryptionWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/encryption.png\" alt=\"Encryption\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.Encryption**\n\n<img width=\"30\" src=\"/img/resources/oci/security/id-access-white.png\" alt=\"IDAccessWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.IDAccessWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/id-access.png\" alt=\"IDAccess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.IDAccess**\n\n<img width=\"30\" src=\"/img/resources/oci/security/key-management-white.png\" alt=\"KeyManagementWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.KeyManagementWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/key-management.png\" alt=\"KeyManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.KeyManagement**\n\n<img width=\"30\" src=\"/img/resources/oci/security/max-security-zone-white.png\" alt=\"MaxSecurityZoneWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.MaxSecurityZoneWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/max-security-zone.png\" alt=\"MaxSecurityZone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.MaxSecurityZone**\n\n<img width=\"30\" src=\"/img/resources/oci/security/vault-white.png\" alt=\"VaultWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.VaultWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/vault.png\" alt=\"Vault\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.Vault**\n\n<img width=\"30\" src=\"/img/resources/oci/security/waf-white.png\" alt=\"WAFWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.WAFWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/security/waf.png\" alt=\"WAF\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.security.WAF**\n\n## oci.storage\n\n\n<img width=\"30\" src=\"/img/resources/oci/storage/backup-restore-white.png\" alt=\"BackupRestoreWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BackupRestoreWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/backup-restore.png\" alt=\"BackupRestore\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BackupRestore**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/block-storage-clone-white.png\" alt=\"BlockStorageCloneWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BlockStorageCloneWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/block-storage-clone.png\" alt=\"BlockStorageClone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BlockStorageClone**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/block-storage-white.png\" alt=\"BlockStorageWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BlockStorageWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/block-storage.png\" alt=\"BlockStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BlockStorage**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/buckets-white.png\" alt=\"BucketsWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.BucketsWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/buckets.png\" alt=\"Buckets\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.Buckets**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/data-transfer-white.png\" alt=\"DataTransferWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.DataTransferWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/data-transfer.png\" alt=\"DataTransfer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.DataTransfer**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/elastic-performance-white.png\" alt=\"ElasticPerformanceWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.ElasticPerformanceWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/elastic-performance.png\" alt=\"ElasticPerformance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.ElasticPerformance**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/file-storage-white.png\" alt=\"FileStorageWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.FileStorageWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/file-storage.png\" alt=\"FileStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.FileStorage**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/object-storage-white.png\" alt=\"ObjectStorageWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.ObjectStorageWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/object-storage.png\" alt=\"ObjectStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.ObjectStorage**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/storage-gateway-white.png\" alt=\"StorageGatewayWhite\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.StorageGatewayWhite**\n\n<img width=\"30\" src=\"/img/resources/oci/storage/storage-gateway.png\" alt=\"StorageGateway\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.oci.storage.StorageGateway**\n"
  },
  {
    "path": "docs/nodes/onprem.md",
    "content": "---\nid: onprem\ntitle: OnPrem\n---\n\nNode classes list of the onprem provider.\n\n## onprem.aggregator\n\n\n<img width=\"30\" src=\"/img/resources/onprem/aggregator/fluentd.png\" alt=\"Fluentd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.aggregator.Fluentd**\n\n<img width=\"30\" src=\"/img/resources/onprem/aggregator/vector.png\" alt=\"Vector\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.aggregator.Vector**\n\n## onprem.analytics\n\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/beam.png\" alt=\"Beam\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Beam**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/databricks.png\" alt=\"Databricks\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Databricks**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/dbt.png\" alt=\"Dbt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Dbt**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/dremio.png\" alt=\"Dremio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Dremio**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/flink.png\" alt=\"Flink\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Flink**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/hadoop.png\" alt=\"Hadoop\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Hadoop**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/hive.png\" alt=\"Hive\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Hive**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/metabase.png\" alt=\"Metabase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Metabase**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/norikra.png\" alt=\"Norikra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Norikra**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/powerbi.png\" alt=\"Powerbi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Powerbi**, **PowerBI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/presto.png\" alt=\"Presto\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Presto**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/singer.png\" alt=\"Singer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Singer**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/spark.png\" alt=\"Spark\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Spark**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/storm.png\" alt=\"Storm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Storm**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/superset.png\" alt=\"Superset\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Superset**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/tableau.png\" alt=\"Tableau\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Tableau**\n\n<img width=\"30\" src=\"/img/resources/onprem/analytics/trino.png\" alt=\"Trino\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.analytics.Trino**\n\n## onprem.auth\n\n\n<img width=\"30\" src=\"/img/resources/onprem/auth/boundary.png\" alt=\"Boundary\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.auth.Boundary**\n\n<img width=\"30\" src=\"/img/resources/onprem/auth/buzzfeed-sso.png\" alt=\"BuzzfeedSso\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.auth.BuzzfeedSso**\n\n<img width=\"30\" src=\"/img/resources/onprem/auth/oauth2-proxy.png\" alt=\"Oauth2Proxy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.auth.Oauth2Proxy**\n\n## onprem.cd\n\n\n<img width=\"30\" src=\"/img/resources/onprem/cd/spinnaker.png\" alt=\"Spinnaker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.cd.Spinnaker**\n\n<img width=\"30\" src=\"/img/resources/onprem/cd/tekton-cli.png\" alt=\"TektonCli\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.cd.TektonCli**\n\n<img width=\"30\" src=\"/img/resources/onprem/cd/tekton.png\" alt=\"Tekton\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.cd.Tekton**\n\n## onprem.certificates\n\n\n<img width=\"30\" src=\"/img/resources/onprem/certificates/cert-manager.png\" alt=\"CertManager\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.certificates.CertManager**\n\n<img width=\"30\" src=\"/img/resources/onprem/certificates/lets-encrypt.png\" alt=\"LetsEncrypt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.certificates.LetsEncrypt**\n\n## onprem.ci\n\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/circleci.png\" alt=\"Circleci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Circleci**, **CircleCI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/concourseci.png\" alt=\"Concourseci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Concourseci**, **ConcourseCI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/droneci.png\" alt=\"Droneci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Droneci**, **DroneCI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/github-actions.png\" alt=\"GithubActions\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.GithubActions**\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/gitlabci.png\" alt=\"Gitlabci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Gitlabci**, **GitlabCI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/jenkins.png\" alt=\"Jenkins\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Jenkins**\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/teamcity.png\" alt=\"Teamcity\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Teamcity**, **TC** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/travisci.png\" alt=\"Travisci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Travisci**, **TravisCI** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/ci/zuulci.png\" alt=\"Zuulci\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.ci.Zuulci**, **ZuulCI** (alias)\n\n## onprem.client\n\n\n<img width=\"30\" src=\"/img/resources/onprem/client/client.png\" alt=\"Client\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.client.Client**\n\n<img width=\"30\" src=\"/img/resources/onprem/client/user.png\" alt=\"User\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.client.User**\n\n<img width=\"30\" src=\"/img/resources/onprem/client/users.png\" alt=\"Users\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.client.Users**\n\n## onprem.compute\n\n\n<img width=\"30\" src=\"/img/resources/onprem/compute/nomad.png\" alt=\"Nomad\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.compute.Nomad**\n\n<img width=\"30\" src=\"/img/resources/onprem/compute/server.png\" alt=\"Server\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.compute.Server**\n\n## onprem.container\n\n\n<img width=\"30\" src=\"/img/resources/onprem/container/containerd.png\" alt=\"Containerd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Containerd**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/crio.png\" alt=\"Crio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Crio**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/docker.png\" alt=\"Docker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Docker**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/firecracker.png\" alt=\"Firecracker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Firecracker**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/gvisor.png\" alt=\"Gvisor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Gvisor**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/k3s.png\" alt=\"K3S\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.K3S**\n\n<img width=\"30\" src=\"/img/resources/onprem/container/lxc.png\" alt=\"Lxc\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Lxc**, **LXC** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/container/rkt.png\" alt=\"Rkt\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.container.Rkt**, **RKT** (alias)\n\n## onprem.database\n\n\n<img width=\"30\" src=\"/img/resources/onprem/database/cassandra.png\" alt=\"Cassandra\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Cassandra**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/clickhouse.png\" alt=\"Clickhouse\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Clickhouse**, **ClickHouse** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/cockroachdb.png\" alt=\"Cockroachdb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Cockroachdb**, **CockroachDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/couchbase.png\" alt=\"Couchbase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Couchbase**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/couchdb.png\" alt=\"Couchdb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Couchdb**, **CouchDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/dgraph.png\" alt=\"Dgraph\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Dgraph**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/druid.png\" alt=\"Druid\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Druid**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/duckdb.png\" alt=\"Duckdb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Duckdb**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/hbase.png\" alt=\"Hbase\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Hbase**, **HBase** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/influxdb.png\" alt=\"Influxdb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Influxdb**, **InfluxDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/janusgraph.png\" alt=\"Janusgraph\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Janusgraph**, **JanusGraph** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/mariadb.png\" alt=\"Mariadb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Mariadb**, **MariaDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/mongodb.png\" alt=\"Mongodb\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Mongodb**, **MongoDB** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/mssql.png\" alt=\"Mssql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Mssql**, **MSSQL** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/mysql.png\" alt=\"Mysql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Mysql**, **MySQL** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/neo4j.png\" alt=\"Neo4J\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Neo4J**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/oracle.png\" alt=\"Oracle\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Oracle**\n\n<img width=\"30\" src=\"/img/resources/onprem/database/postgresql.png\" alt=\"Postgresql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Postgresql**, **PostgreSQL** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/qdrant.png\" alt=\"Qdrant\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Qdrant**, **Qdrant** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/database/scylla.png\" alt=\"Scylla\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.database.Scylla**\n\n## onprem.dns\n\n\n<img width=\"30\" src=\"/img/resources/onprem/dns/coredns.png\" alt=\"Coredns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.dns.Coredns**\n\n<img width=\"30\" src=\"/img/resources/onprem/dns/powerdns.png\" alt=\"Powerdns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.dns.Powerdns**\n\n## onprem.etl\n\n\n<img width=\"30\" src=\"/img/resources/onprem/etl/embulk.png\" alt=\"Embulk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.etl.Embulk**\n\n## onprem.gitops\n\n\n<img width=\"30\" src=\"/img/resources/onprem/gitops/argocd.png\" alt=\"Argocd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.gitops.Argocd**, **ArgoCD** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/gitops/flagger.png\" alt=\"Flagger\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.gitops.Flagger**\n\n<img width=\"30\" src=\"/img/resources/onprem/gitops/flux.png\" alt=\"Flux\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.gitops.Flux**\n\n## onprem.groupware\n\n\n<img width=\"30\" src=\"/img/resources/onprem/groupware/nextcloud.png\" alt=\"Nextcloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.groupware.Nextcloud**\n\n## onprem.iac\n\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/ansible.png\" alt=\"Ansible\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Ansible**\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/atlantis.png\" alt=\"Atlantis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Atlantis**\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/awx.png\" alt=\"Awx\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Awx**\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/pulumi.png\" alt=\"Pulumi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Pulumi**\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/puppet.png\" alt=\"Puppet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Puppet**\n\n<img width=\"30\" src=\"/img/resources/onprem/iac/terraform.png\" alt=\"Terraform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.iac.Terraform**\n\n## onprem.identity\n\n\n<img width=\"30\" src=\"/img/resources/onprem/identity/dex.png\" alt=\"Dex\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.identity.Dex**\n\n## onprem.inmemory\n\n\n<img width=\"30\" src=\"/img/resources/onprem/inmemory/aerospike.png\" alt=\"Aerospike\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.inmemory.Aerospike**\n\n<img width=\"30\" src=\"/img/resources/onprem/inmemory/hazelcast.png\" alt=\"Hazelcast\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.inmemory.Hazelcast**\n\n<img width=\"30\" src=\"/img/resources/onprem/inmemory/memcached.png\" alt=\"Memcached\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.inmemory.Memcached**\n\n<img width=\"30\" src=\"/img/resources/onprem/inmemory/redis.png\" alt=\"Redis\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.inmemory.Redis**\n\n## onprem.logging\n\n\n<img width=\"30\" src=\"/img/resources/onprem/logging/fluentbit.png\" alt=\"Fluentbit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.logging.Fluentbit**, **FluentBit** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/logging/graylog.png\" alt=\"Graylog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.logging.Graylog**\n\n<img width=\"30\" src=\"/img/resources/onprem/logging/loki.png\" alt=\"Loki\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.logging.Loki**\n\n<img width=\"30\" src=\"/img/resources/onprem/logging/rsyslog.png\" alt=\"Rsyslog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.logging.Rsyslog**, **RSyslog** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/logging/syslog-ng.png\" alt=\"SyslogNg\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.logging.SyslogNg**\n\n## onprem.messaging\n\n\n<img width=\"30\" src=\"/img/resources/onprem/messaging/centrifugo.png\" alt=\"Centrifugo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.messaging.Centrifugo**\n\n## onprem.mlops\n\n\n<img width=\"30\" src=\"/img/resources/onprem/mlops/mlflow.png\" alt=\"Mlflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.mlops.Mlflow**\n\n<img width=\"30\" src=\"/img/resources/onprem/mlops/polyaxon.png\" alt=\"Polyaxon\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.mlops.Polyaxon**\n\n## onprem.monitoring\n\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/cortex.png\" alt=\"Cortex\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Cortex**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/datadog.png\" alt=\"Datadog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Datadog**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/dynatrace.png\" alt=\"Dynatrace\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Dynatrace**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/grafana.png\" alt=\"Grafana\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Grafana**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/humio.png\" alt=\"Humio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Humio**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/mimir.png\" alt=\"Mimir\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Mimir**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/nagios.png\" alt=\"Nagios\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Nagios**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/newrelic.png\" alt=\"Newrelic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Newrelic**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/prometheus-operator.png\" alt=\"PrometheusOperator\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.PrometheusOperator**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/prometheus.png\" alt=\"Prometheus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Prometheus**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/sentry.png\" alt=\"Sentry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Sentry**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/splunk.png\" alt=\"Splunk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Splunk**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/thanos.png\" alt=\"Thanos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Thanos**\n\n<img width=\"30\" src=\"/img/resources/onprem/monitoring/zabbix.png\" alt=\"Zabbix\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.monitoring.Zabbix**\n\n## onprem.network\n\n\n<img width=\"30\" src=\"/img/resources/onprem/network/ambassador.png\" alt=\"Ambassador\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Ambassador**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/apache.png\" alt=\"Apache\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Apache**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/bind-9.png\" alt=\"Bind9\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Bind9**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/caddy.png\" alt=\"Caddy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Caddy**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/cisco-router.png\" alt=\"CiscoRouter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.CiscoRouter**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/cisco-switch-l2.png\" alt=\"CiscoSwitchL2\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.CiscoSwitchL2**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/cisco-switch-l3.png\" alt=\"CiscoSwitchL3\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.CiscoSwitchL3**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/consul.png\" alt=\"Consul\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Consul**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/envoy.png\" alt=\"Envoy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Envoy**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/etcd.png\" alt=\"Etcd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Etcd**, **ETCD** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/glassfish.png\" alt=\"Glassfish\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Glassfish**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/gunicorn.png\" alt=\"Gunicorn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Gunicorn**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/haproxy.png\" alt=\"Haproxy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Haproxy**, **HAProxy** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/internet.png\" alt=\"Internet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Internet**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/istio.png\" alt=\"Istio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Istio**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/jbossas.png\" alt=\"Jbossas\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Jbossas**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/jetty.png\" alt=\"Jetty\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Jetty**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/kong.png\" alt=\"Kong\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Kong**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/linkerd.png\" alt=\"Linkerd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Linkerd**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/mikrotik.png\" alt=\"Mikrotik\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Mikrotik**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/nginx.png\" alt=\"Nginx\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Nginx**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/ocelot.png\" alt=\"Ocelot\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Ocelot**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/open-service-mesh.png\" alt=\"OpenServiceMesh\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.OpenServiceMesh**, **OSM** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/opnsense.png\" alt=\"Opnsense\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Opnsense**, **OPNSense** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/pfsense.png\" alt=\"Pfsense\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Pfsense**, **PFSense** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/pomerium.png\" alt=\"Pomerium\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Pomerium**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/powerdns.png\" alt=\"Powerdns\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Powerdns**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/tomcat.png\" alt=\"Tomcat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Tomcat**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/traefik.png\" alt=\"Traefik\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Traefik**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/tyk.png\" alt=\"Tyk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Tyk**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/vyos.png\" alt=\"Vyos\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Vyos**, **VyOS** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/network/wildfly.png\" alt=\"Wildfly\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Wildfly**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/yarp.png\" alt=\"Yarp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Yarp**\n\n<img width=\"30\" src=\"/img/resources/onprem/network/zookeeper.png\" alt=\"Zookeeper\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.network.Zookeeper**\n\n## onprem.proxmox\n\n\n<img width=\"30\" src=\"/img/resources/onprem/proxmox/pve.png\" alt=\"Pve\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.proxmox.Pve**, **ProxmoxVE** (alias)\n\n## onprem.queue\n\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/activemq.png\" alt=\"Activemq\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Activemq**, **ActiveMQ** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/celery.png\" alt=\"Celery\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Celery**\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/emqx.png\" alt=\"Emqx\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Emqx**, **EMQX** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/kafka.png\" alt=\"Kafka\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Kafka**\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/nats.png\" alt=\"Nats\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Nats**\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/rabbitmq.png\" alt=\"Rabbitmq\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Rabbitmq**, **RabbitMQ** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/queue/zeromq.png\" alt=\"Zeromq\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.queue.Zeromq**, **ZeroMQ** (alias)\n\n## onprem.registry\n\n\n<img width=\"30\" src=\"/img/resources/onprem/registry/harbor.png\" alt=\"Harbor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.registry.Harbor**\n\n<img width=\"30\" src=\"/img/resources/onprem/registry/jfrog.png\" alt=\"Jfrog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.registry.Jfrog**\n\n## onprem.search\n\n\n<img width=\"30\" src=\"/img/resources/onprem/search/solr.png\" alt=\"Solr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.search.Solr**\n\n## onprem.security\n\n\n<img width=\"30\" src=\"/img/resources/onprem/security/bitwarden.png\" alt=\"Bitwarden\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.security.Bitwarden**\n\n<img width=\"30\" src=\"/img/resources/onprem/security/trivy.png\" alt=\"Trivy\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.security.Trivy**\n\n<img width=\"30\" src=\"/img/resources/onprem/security/vault.png\" alt=\"Vault\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.security.Vault**\n\n## onprem.storage\n\n\n<img width=\"30\" src=\"/img/resources/onprem/storage/ceph-osd.png\" alt=\"CephOsd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.storage.CephOsd**, **CEPH_OSD** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/storage/ceph.png\" alt=\"Ceph\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.storage.Ceph**, **CEPH** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/storage/glusterfs.png\" alt=\"Glusterfs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.storage.Glusterfs**\n\n<img width=\"30\" src=\"/img/resources/onprem/storage/portworx.png\" alt=\"Portworx\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.storage.Portworx**\n\n## onprem.tracing\n\n\n<img width=\"30\" src=\"/img/resources/onprem/tracing/jaeger.png\" alt=\"Jaeger\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.tracing.Jaeger**\n\n<img width=\"30\" src=\"/img/resources/onprem/tracing/tempo.png\" alt=\"Tempo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.tracing.Tempo**\n\n## onprem.vcs\n\n\n<img width=\"30\" src=\"/img/resources/onprem/vcs/git.png\" alt=\"Git\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.vcs.Git**\n\n<img width=\"30\" src=\"/img/resources/onprem/vcs/gitea.png\" alt=\"Gitea\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.vcs.Gitea**\n\n<img width=\"30\" src=\"/img/resources/onprem/vcs/github.png\" alt=\"Github\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.vcs.Github**\n\n<img width=\"30\" src=\"/img/resources/onprem/vcs/gitlab.png\" alt=\"Gitlab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.vcs.Gitlab**\n\n<img width=\"30\" src=\"/img/resources/onprem/vcs/svn.png\" alt=\"Svn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.vcs.Svn**\n\n## onprem.workflow\n\n\n<img width=\"30\" src=\"/img/resources/onprem/workflow/airflow.png\" alt=\"Airflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.workflow.Airflow**\n\n<img width=\"30\" src=\"/img/resources/onprem/workflow/digdag.png\" alt=\"Digdag\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.workflow.Digdag**\n\n<img width=\"30\" src=\"/img/resources/onprem/workflow/kubeflow.png\" alt=\"Kubeflow\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.workflow.Kubeflow**, **KubeFlow** (alias)\n\n<img width=\"30\" src=\"/img/resources/onprem/workflow/nifi.png\" alt=\"Nifi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.onprem.workflow.Nifi**, **NiFi** (alias)\n"
  },
  {
    "path": "docs/nodes/openstack.md",
    "content": "---\nid: openstack\ntitle: OpenStack\n---\n\nNode classes list of the openstack provider.\n\n## openstack.apiproxies\n\n\n<img width=\"30\" src=\"/img/resources/openstack/apiproxies/ec2api.png\" alt=\"EC2API\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.apiproxies.EC2API**\n\n## openstack.applicationlifecycle\n\n\n<img width=\"30\" src=\"/img/resources/openstack/applicationlifecycle/freezer.png\" alt=\"Freezer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.applicationlifecycle.Freezer**\n\n<img width=\"30\" src=\"/img/resources/openstack/applicationlifecycle/masakari.png\" alt=\"Masakari\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.applicationlifecycle.Masakari**\n\n<img width=\"30\" src=\"/img/resources/openstack/applicationlifecycle/murano.png\" alt=\"Murano\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.applicationlifecycle.Murano**\n\n<img width=\"30\" src=\"/img/resources/openstack/applicationlifecycle/solum.png\" alt=\"Solum\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.applicationlifecycle.Solum**\n\n## openstack.baremetal\n\n\n<img width=\"30\" src=\"/img/resources/openstack/baremetal/cyborg.png\" alt=\"Cyborg\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.baremetal.Cyborg**\n\n<img width=\"30\" src=\"/img/resources/openstack/baremetal/ironic.png\" alt=\"Ironic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.baremetal.Ironic**\n\n## openstack.billing\n\n\n<img width=\"30\" src=\"/img/resources/openstack/billing/cloudkitty.png\" alt=\"Cloudkitty\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.billing.Cloudkitty**, **CloudKitty** (alias)\n\n## openstack.compute\n\n\n<img width=\"30\" src=\"/img/resources/openstack/compute/nova.png\" alt=\"Nova\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.compute.Nova**\n\n<img width=\"30\" src=\"/img/resources/openstack/compute/qinling.png\" alt=\"Qinling\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.compute.Qinling**\n\n<img width=\"30\" src=\"/img/resources/openstack/compute/zun.png\" alt=\"Zun\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.compute.Zun**\n\n## openstack.containerservices\n\n\n<img width=\"30\" src=\"/img/resources/openstack/containerservices/kuryr.png\" alt=\"Kuryr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.containerservices.Kuryr**\n\n## openstack.deployment\n\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/ansible.png\" alt=\"Ansible\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Ansible**\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/charms.png\" alt=\"Charms\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Charms**\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/chef.png\" alt=\"Chef\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Chef**\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/helm.png\" alt=\"Helm\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Helm**\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/kolla.png\" alt=\"Kolla\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Kolla**, **KollaAnsible** (alias)\n\n<img width=\"30\" src=\"/img/resources/openstack/deployment/tripleo.png\" alt=\"Tripleo\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.deployment.Tripleo**, **TripleO** (alias)\n\n## openstack.frontend\n\n\n<img width=\"30\" src=\"/img/resources/openstack/frontend/horizon.png\" alt=\"Horizon\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.frontend.Horizon**\n\n## openstack.monitoring\n\n\n<img width=\"30\" src=\"/img/resources/openstack/monitoring/monasca.png\" alt=\"Monasca\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.monitoring.Monasca**\n\n<img width=\"30\" src=\"/img/resources/openstack/monitoring/telemetry.png\" alt=\"Telemetry\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.monitoring.Telemetry**\n\n## openstack.multiregion\n\n\n<img width=\"30\" src=\"/img/resources/openstack/multiregion/tricircle.png\" alt=\"Tricircle\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.multiregion.Tricircle**\n\n## openstack.networking\n\n\n<img width=\"30\" src=\"/img/resources/openstack/networking/designate.png\" alt=\"Designate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.networking.Designate**\n\n<img width=\"30\" src=\"/img/resources/openstack/networking/neutron.png\" alt=\"Neutron\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.networking.Neutron**\n\n<img width=\"30\" src=\"/img/resources/openstack/networking/octavia.png\" alt=\"Octavia\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.networking.Octavia**\n\n## openstack.nfv\n\n\n<img width=\"30\" src=\"/img/resources/openstack/nfv/tacker.png\" alt=\"Tacker\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.nfv.Tacker**\n\n## openstack.optimization\n\n\n<img width=\"30\" src=\"/img/resources/openstack/optimization/congress.png\" alt=\"Congress\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.optimization.Congress**\n\n<img width=\"30\" src=\"/img/resources/openstack/optimization/rally.png\" alt=\"Rally\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.optimization.Rally**\n\n<img width=\"30\" src=\"/img/resources/openstack/optimization/vitrage.png\" alt=\"Vitrage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.optimization.Vitrage**\n\n<img width=\"30\" src=\"/img/resources/openstack/optimization/watcher.png\" alt=\"Watcher\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.optimization.Watcher**\n\n## openstack.orchestration\n\n\n<img width=\"30\" src=\"/img/resources/openstack/orchestration/blazar.png\" alt=\"Blazar\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.orchestration.Blazar**\n\n<img width=\"30\" src=\"/img/resources/openstack/orchestration/heat.png\" alt=\"Heat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.orchestration.Heat**\n\n<img width=\"30\" src=\"/img/resources/openstack/orchestration/mistral.png\" alt=\"Mistral\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.orchestration.Mistral**\n\n<img width=\"30\" src=\"/img/resources/openstack/orchestration/senlin.png\" alt=\"Senlin\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.orchestration.Senlin**\n\n<img width=\"30\" src=\"/img/resources/openstack/orchestration/zaqar.png\" alt=\"Zaqar\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.orchestration.Zaqar**\n\n## openstack.packaging\n\n\n<img width=\"30\" src=\"/img/resources/openstack/packaging/loci.png\" alt=\"LOCI\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.packaging.LOCI**\n\n<img width=\"30\" src=\"/img/resources/openstack/packaging/puppet.png\" alt=\"Puppet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.packaging.Puppet**\n\n<img width=\"30\" src=\"/img/resources/openstack/packaging/rpm.png\" alt=\"RPM\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.packaging.RPM**\n\n## openstack.sharedservices\n\n\n<img width=\"30\" src=\"/img/resources/openstack/sharedservices/barbican.png\" alt=\"Barbican\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.sharedservices.Barbican**\n\n<img width=\"30\" src=\"/img/resources/openstack/sharedservices/glance.png\" alt=\"Glance\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.sharedservices.Glance**\n\n<img width=\"30\" src=\"/img/resources/openstack/sharedservices/karbor.png\" alt=\"Karbor\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.sharedservices.Karbor**\n\n<img width=\"30\" src=\"/img/resources/openstack/sharedservices/keystone.png\" alt=\"Keystone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.sharedservices.Keystone**\n\n<img width=\"30\" src=\"/img/resources/openstack/sharedservices/searchlight.png\" alt=\"Searchlight\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.sharedservices.Searchlight**\n\n## openstack.storage\n\n\n<img width=\"30\" src=\"/img/resources/openstack/storage/cinder.png\" alt=\"Cinder\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.storage.Cinder**\n\n<img width=\"30\" src=\"/img/resources/openstack/storage/manila.png\" alt=\"Manila\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.storage.Manila**\n\n<img width=\"30\" src=\"/img/resources/openstack/storage/swift.png\" alt=\"Swift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.storage.Swift**\n\n## openstack.user\n\n\n<img width=\"30\" src=\"/img/resources/openstack/user/openstackclient.png\" alt=\"Openstackclient\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.user.Openstackclient**, **OpenStackClient** (alias)\n\n## openstack.workloadprovisioning\n\n\n<img width=\"30\" src=\"/img/resources/openstack/workloadprovisioning/magnum.png\" alt=\"Magnum\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.workloadprovisioning.Magnum**\n\n<img width=\"30\" src=\"/img/resources/openstack/workloadprovisioning/sahara.png\" alt=\"Sahara\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.workloadprovisioning.Sahara**\n\n<img width=\"30\" src=\"/img/resources/openstack/workloadprovisioning/trove.png\" alt=\"Trove\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.openstack.workloadprovisioning.Trove**\n"
  },
  {
    "path": "docs/nodes/outscale.md",
    "content": "---\nid: outscale\ntitle: Outscale\n---\n\nNode classes list of the outscale provider.\n\n## outscale.compute\n\n\n<img width=\"30\" src=\"/img/resources/outscale/compute/compute.png\" alt=\"Compute\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.compute.Compute**\n\n<img width=\"30\" src=\"/img/resources/outscale/compute/direct-connect.png\" alt=\"DirectConnect\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.compute.DirectConnect**\n\n## outscale.network\n\n\n<img width=\"30\" src=\"/img/resources/outscale/network/client-vpn.png\" alt=\"ClientVpn\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.ClientVpn**\n\n<img width=\"30\" src=\"/img/resources/outscale/network/internet-service.png\" alt=\"InternetService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.InternetService**\n\n<img width=\"30\" src=\"/img/resources/outscale/network/load-balancer.png\" alt=\"LoadBalancer\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.LoadBalancer**\n\n<img width=\"30\" src=\"/img/resources/outscale/network/nat-service.png\" alt=\"NatService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.NatService**\n\n<img width=\"30\" src=\"/img/resources/outscale/network/net.png\" alt=\"Net\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.Net**\n\n<img width=\"30\" src=\"/img/resources/outscale/network/site-to-site-vpng.png\" alt=\"SiteToSiteVpng\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.network.SiteToSiteVpng**\n\n## outscale.security\n\n\n<img width=\"30\" src=\"/img/resources/outscale/security/firewall.png\" alt=\"Firewall\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.security.Firewall**\n\n<img width=\"30\" src=\"/img/resources/outscale/security/identity-and-access-management.png\" alt=\"IdentityAndAccessManagement\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.security.IdentityAndAccessManagement**\n\n## outscale.storage\n\n\n<img width=\"30\" src=\"/img/resources/outscale/storage/simple-storage-service.png\" alt=\"SimpleStorageService\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.storage.SimpleStorageService**\n\n<img width=\"30\" src=\"/img/resources/outscale/storage/storage.png\" alt=\"Storage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.outscale.storage.Storage**\n"
  },
  {
    "path": "docs/nodes/programming.md",
    "content": "---\nid: programming\ntitle: Programming\n---\n\nNode classes list of the programming provider.\n\n## programming.flowchart\n\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/action.png\" alt=\"Action\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Action**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/collate.png\" alt=\"Collate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Collate**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/database.png\" alt=\"Database\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Database**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/decision.png\" alt=\"Decision\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Decision**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/delay.png\" alt=\"Delay\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Delay**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/display.png\" alt=\"Display\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Display**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/document.png\" alt=\"Document\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Document**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/input-output.png\" alt=\"InputOutput\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.InputOutput**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/inspection.png\" alt=\"Inspection\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Inspection**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/internal-storage.png\" alt=\"InternalStorage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.InternalStorage**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/loop-limit.png\" alt=\"LoopLimit\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.LoopLimit**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/manual-input.png\" alt=\"ManualInput\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.ManualInput**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/manual-loop.png\" alt=\"ManualLoop\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.ManualLoop**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/merge.png\" alt=\"Merge\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Merge**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/multiple-documents.png\" alt=\"MultipleDocuments\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.MultipleDocuments**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/off-page-connector-left.png\" alt=\"OffPageConnectorLeft\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.OffPageConnectorLeft**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/off-page-connector-right.png\" alt=\"OffPageConnectorRight\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.OffPageConnectorRight**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/or.png\" alt=\"Or\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Or**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/predefined-process.png\" alt=\"PredefinedProcess\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.PredefinedProcess**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/preparation.png\" alt=\"Preparation\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Preparation**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/sort.png\" alt=\"Sort\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.Sort**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/start-end.png\" alt=\"StartEnd\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.StartEnd**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/stored-data.png\" alt=\"StoredData\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.StoredData**\n\n<img width=\"30\" src=\"/img/resources/programming/flowchart/summing-junction.png\" alt=\"SummingJunction\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.flowchart.SummingJunction**\n\n## programming.framework\n\n\n<img width=\"30\" src=\"/img/resources/programming/framework/angular.png\" alt=\"Angular\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Angular**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/backbone.png\" alt=\"Backbone\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Backbone**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/camel.png\" alt=\"Camel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Camel**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/django.png\" alt=\"Django\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Django**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/dotnet.png\" alt=\"Dotnet\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Dotnet**, **DotNet** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/framework/ember.png\" alt=\"Ember\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Ember**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/fastapi.png\" alt=\"Fastapi\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Fastapi**, **FastAPI** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/framework/flask.png\" alt=\"Flask\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Flask**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/flutter.png\" alt=\"Flutter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Flutter**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/graphql.png\" alt=\"Graphql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Graphql**, **GraphQL** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/framework/hibernate.png\" alt=\"Hibernate\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Hibernate**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/jhipster.png\" alt=\"Jhipster\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Jhipster**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/laravel.png\" alt=\"Laravel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Laravel**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/micronaut.png\" alt=\"Micronaut\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Micronaut**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/nextjs.png\" alt=\"Nextjs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Nextjs**, **NextJs** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/framework/phoenix.png\" alt=\"Phoenix\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Phoenix**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/quarkus.png\" alt=\"Quarkus\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Quarkus**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/rails.png\" alt=\"Rails\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Rails**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/react.png\" alt=\"React\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.React**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/spring.png\" alt=\"Spring\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Spring**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/sqlpage.png\" alt=\"Sqlpage\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Sqlpage**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/starlette.png\" alt=\"Starlette\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Starlette**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/svelte.png\" alt=\"Svelte\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Svelte**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/vercel.png\" alt=\"Vercel\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Vercel**\n\n<img width=\"30\" src=\"/img/resources/programming/framework/vue.png\" alt=\"Vue\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.framework.Vue**\n\n## programming.language\n\n\n<img width=\"30\" src=\"/img/resources/programming/language/bash.png\" alt=\"Bash\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Bash**\n\n<img width=\"30\" src=\"/img/resources/programming/language/c.png\" alt=\"C\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.C**\n\n<img width=\"30\" src=\"/img/resources/programming/language/cpp.png\" alt=\"Cpp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Cpp**\n\n<img width=\"30\" src=\"/img/resources/programming/language/csharp.png\" alt=\"Csharp\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Csharp**\n\n<img width=\"30\" src=\"/img/resources/programming/language/dart.png\" alt=\"Dart\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Dart**\n\n<img width=\"30\" src=\"/img/resources/programming/language/elixir.png\" alt=\"Elixir\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Elixir**\n\n<img width=\"30\" src=\"/img/resources/programming/language/erlang.png\" alt=\"Erlang\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Erlang**\n\n<img width=\"30\" src=\"/img/resources/programming/language/go.png\" alt=\"Go\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Go**\n\n<img width=\"30\" src=\"/img/resources/programming/language/java.png\" alt=\"Java\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Java**\n\n<img width=\"30\" src=\"/img/resources/programming/language/javascript.png\" alt=\"Javascript\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Javascript**, **JavaScript** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/language/kotlin.png\" alt=\"Kotlin\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Kotlin**\n\n<img width=\"30\" src=\"/img/resources/programming/language/latex.png\" alt=\"Latex\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Latex**\n\n<img width=\"30\" src=\"/img/resources/programming/language/matlab.png\" alt=\"Matlab\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Matlab**\n\n<img width=\"30\" src=\"/img/resources/programming/language/nodejs.png\" alt=\"Nodejs\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Nodejs**, **NodeJS** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/language/php.png\" alt=\"Php\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Php**, **PHP** (alias)\n\n<img width=\"30\" src=\"/img/resources/programming/language/python.png\" alt=\"Python\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Python**\n\n<img width=\"30\" src=\"/img/resources/programming/language/r.png\" alt=\"R\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.R**\n\n<img width=\"30\" src=\"/img/resources/programming/language/ruby.png\" alt=\"Ruby\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Ruby**\n\n<img width=\"30\" src=\"/img/resources/programming/language/rust.png\" alt=\"Rust\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Rust**\n\n<img width=\"30\" src=\"/img/resources/programming/language/scala.png\" alt=\"Scala\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Scala**\n\n<img width=\"30\" src=\"/img/resources/programming/language/sql.png\" alt=\"Sql\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Sql**\n\n<img width=\"30\" src=\"/img/resources/programming/language/swift.png\" alt=\"Swift\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Swift**\n\n<img width=\"30\" src=\"/img/resources/programming/language/typescript.png\" alt=\"Typescript\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.language.Typescript**, **TypeScript** (alias)\n\n## programming.runtime\n\n\n<img width=\"30\" src=\"/img/resources/programming/runtime/dapr.png\" alt=\"Dapr\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.programming.runtime.Dapr**\n"
  },
  {
    "path": "docs/nodes/saas.md",
    "content": "---\nid: saas\ntitle: Saas\n---\n\nNode classes list of the saas provider.\n\n## saas.alerting\n\n\n<img width=\"30\" src=\"/img/resources/saas/alerting/newrelic.png\" alt=\"Newrelic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.alerting.Newrelic**\n\n<img width=\"30\" src=\"/img/resources/saas/alerting/opsgenie.png\" alt=\"Opsgenie\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.alerting.Opsgenie**\n\n<img width=\"30\" src=\"/img/resources/saas/alerting/pagerduty.png\" alt=\"Pagerduty\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.alerting.Pagerduty**\n\n<img width=\"30\" src=\"/img/resources/saas/alerting/pushover.png\" alt=\"Pushover\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.alerting.Pushover**\n\n<img width=\"30\" src=\"/img/resources/saas/alerting/xmatters.png\" alt=\"Xmatters\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.alerting.Xmatters**\n\n## saas.analytics\n\n\n<img width=\"30\" src=\"/img/resources/saas/analytics/dataform.png\" alt=\"Dataform\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.analytics.Dataform**\n\n<img width=\"30\" src=\"/img/resources/saas/analytics/snowflake.png\" alt=\"Snowflake\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.analytics.Snowflake**\n\n<img width=\"30\" src=\"/img/resources/saas/analytics/stitch.png\" alt=\"Stitch\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.analytics.Stitch**\n\n## saas.automation\n\n\n<img width=\"30\" src=\"/img/resources/saas/automation/n8n.png\" alt=\"N8N\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.automation.N8N**\n\n## saas.cdn\n\n\n<img width=\"30\" src=\"/img/resources/saas/cdn/akamai.png\" alt=\"Akamai\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.cdn.Akamai**\n\n<img width=\"30\" src=\"/img/resources/saas/cdn/cloudflare.png\" alt=\"Cloudflare\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.cdn.Cloudflare**\n\n<img width=\"30\" src=\"/img/resources/saas/cdn/fastly.png\" alt=\"Fastly\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.cdn.Fastly**\n\n<img width=\"30\" src=\"/img/resources/saas/cdn/imperva.png\" alt=\"Imperva\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.cdn.Imperva**\n\n## saas.chat\n\n\n<img width=\"30\" src=\"/img/resources/saas/chat/discord.png\" alt=\"Discord\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Discord**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/line.png\" alt=\"Line\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Line**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/mattermost.png\" alt=\"Mattermost\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Mattermost**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/messenger.png\" alt=\"Messenger\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Messenger**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/rocket-chat.png\" alt=\"RocketChat\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.RocketChat**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/slack.png\" alt=\"Slack\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Slack**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/teams.png\" alt=\"Teams\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Teams**\n\n<img width=\"30\" src=\"/img/resources/saas/chat/telegram.png\" alt=\"Telegram\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.chat.Telegram**\n\n## saas.communication\n\n\n<img width=\"30\" src=\"/img/resources/saas/communication/twilio.png\" alt=\"Twilio\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.communication.Twilio**\n\n## saas.crm\n\n\n<img width=\"30\" src=\"/img/resources/saas/crm/intercom.png\" alt=\"Intercom\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.crm.Intercom**\n\n<img width=\"30\" src=\"/img/resources/saas/crm/zendesk.png\" alt=\"Zendesk\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.crm.Zendesk**\n\n## saas.filesharing\n\n\n<img width=\"30\" src=\"/img/resources/saas/filesharing/nextcloud.png\" alt=\"Nextcloud\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.filesharing.Nextcloud**\n\n## saas.identity\n\n\n<img width=\"30\" src=\"/img/resources/saas/identity/auth0.png\" alt=\"Auth0\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.identity.Auth0**\n\n<img width=\"30\" src=\"/img/resources/saas/identity/okta.png\" alt=\"Okta\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.identity.Okta**\n\n## saas.logging\n\n\n<img width=\"30\" src=\"/img/resources/saas/logging/datadog.png\" alt=\"Datadog\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.logging.Datadog**, **DataDog** (alias)\n\n<img width=\"30\" src=\"/img/resources/saas/logging/newrelic.png\" alt=\"Newrelic\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.logging.Newrelic**, **NewRelic** (alias)\n\n<img width=\"30\" src=\"/img/resources/saas/logging/papertrail.png\" alt=\"Papertrail\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.logging.Papertrail**\n\n## saas.media\n\n\n<img width=\"30\" src=\"/img/resources/saas/media/cloudinary.png\" alt=\"Cloudinary\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.media.Cloudinary**\n\n## saas.payment\n\n\n<img width=\"30\" src=\"/img/resources/saas/payment/adyen.png\" alt=\"Adyen\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.payment.Adyen**\n\n<img width=\"30\" src=\"/img/resources/saas/payment/amazon-pay.png\" alt=\"AmazonPay\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.payment.AmazonPay**\n\n<img width=\"30\" src=\"/img/resources/saas/payment/paypal.png\" alt=\"Paypal\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.payment.Paypal**\n\n<img width=\"30\" src=\"/img/resources/saas/payment/stripe.png\" alt=\"Stripe\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.payment.Stripe**\n\n## saas.recommendation\n\n\n<img width=\"30\" src=\"/img/resources/saas/recommendation/recombee.png\" alt=\"Recombee\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.recommendation.Recombee**\n\n## saas.security\n\n\n<img width=\"30\" src=\"/img/resources/saas/security/crowdstrike.png\" alt=\"Crowdstrike\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.security.Crowdstrike**\n\n<img width=\"30\" src=\"/img/resources/saas/security/sonarqube.png\" alt=\"Sonarqube\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.security.Sonarqube**\n\n## saas.social\n\n\n<img width=\"30\" src=\"/img/resources/saas/social/facebook.png\" alt=\"Facebook\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.social.Facebook**\n\n<img width=\"30\" src=\"/img/resources/saas/social/twitter.png\" alt=\"Twitter\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.saas.social.Twitter**\n"
  },
  {
    "path": "pyproject.toml",
    "content": "[build-system]\nrequires = [\"hatchling\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"diagrams\"\nversion = \"0.25.1\"\ndescription = \"Diagram as Code\"\nauthors = [{ name = \"mingrammer\", email = \"mingrammer@gmail.com\" }]\nrequires-python = \"~=3.9\"\nreadme = \"README.md\"\nlicense = \"MIT\"\ndependencies = [\n    \"graphviz>=0.13.2,<0.22.0\",\n    \"jinja2>=2.10,<4.0\",\n    \"typed-ast>=1.5.5,<2 ; python_version<'3.8'\",\n]\n\n[project.scripts]\ndiagrams = \"diagrams.cli:main\"\n\n[project.urls]\nHomepage = \"https://diagrams.mingrammer.com\"\nRepository = \"https://github.com/mingrammer/diagrams\"\n\n[tool.poetry.group.dev.dependencies]\npytest = \"^8.3\"\npylint = \"^3.3\"\nrope = \"^1.13\"\nisort = \"^6.0\"\nblack = \"^24.4\"\npre-commit = \"^4.0\"\n\n[tool.hatch.build]\nonly-include = [\"diagrams\", \"resources\"]\n\n[tool.black]\nline-length=120\n"
  },
  {
    "path": "scripts/__init__.py",
    "content": "import os\nfrom pathlib import Path\n\nimport config as cfg\n\n\ndef base_dir() -> Path:\n    return Path(os.path.abspath(os.path.dirname(__file__))).parent\n\n\ndef app_root_dir(pvd: str) -> str:\n    return os.path.join(base_dir(), cfg.DIR_APP_ROOT, pvd)\n\n\ndef doc_root_dir() -> str:\n    return os.path.join(base_dir(), cfg.DIR_DOC_ROOT)\n\n\ndef resource_dir(pvd: str) -> str:\n    return os.path.join(base_dir(), cfg.DIR_RESOURCE, pvd)\n\n\ndef template_dir() -> str:\n    return os.path.join(base_dir(), cfg.DIR_TEMPLATE)\n"
  },
  {
    "path": "scripts/generate.py",
    "content": "import os\nimport sys\nfrom typing import Iterable\n\nfrom jinja2 import Environment, FileSystemLoader, Template, exceptions\n\nimport config as cfg\n\nfrom . import app_root_dir, base_dir, doc_root_dir, resource_dir, template_dir\n\n_usage = \"Usage: generate.py <provider>\"\n\n\ndef load_tmpl(tmpl: str) -> Template:\n    env = Environment(loader=FileSystemLoader(template_dir()))\n    env.filters[\"up_or_title\"] = up_or_title\n    return env.get_template(tmpl)\n\n\ndef up_or_title(pvd: str, s: str) -> str:\n    if s in cfg.UPPER_WORDS.get(pvd, ()):\n        return s.upper()\n    if s in cfg.TITLE_WORDS.get(pvd, {}):\n        return cfg.TITLE_WORDS[pvd][s]\n    return s.title()\n\n\ndef gen_classes(pvd: str, typ: str, paths: Iterable[str]) -> str:\n    \"\"\"Generate all service node classes based on resources paths with class templates.\"\"\"\n    tmpl = load_tmpl(cfg.TMPL_MODULE)\n\n    # TODO: extract the gen class metas for sharing\n    # TODO: independent function for generating all pvd/typ/paths pairs\n    def _gen_class_meta(path: str) -> dict:\n        base = os.path.splitext(path)[0]\n        name = \"\".join([up_or_title(pvd, s) for s in base.split(\"-\")])\n        return {\"name\": name, \"icon\": path}\n\n    metas = map(_gen_class_meta, paths)\n    aliases = cfg.ALIASES[pvd][typ] if typ in cfg.ALIASES[pvd] else {}\n    return tmpl.render(pvd=pvd, typ=typ, metas=metas, aliases=aliases)\n\n\ndef gen_apidoc(pvd: str, typ_paths: dict) -> str:\n    try:\n        default_tmp = cfg.TMPL_APIDOC.split(\".\")\n        tmpl_file = f\"{default_tmp[0]}_{pvd}.{default_tmp[1]}\"\n        tmpl = load_tmpl(tmpl_file)\n    except exceptions.TemplateNotFound:\n        tmpl = load_tmpl(cfg.TMPL_APIDOC)\n\n    # TODO: remove\n    def _gen_class_name(path: str) -> str:\n        base = os.path.splitext(path)[0]\n        name = \"\".join([up_or_title(pvd, s) for s in base.split(\"-\")])\n        return name\n\n    typ_classes = {}\n    for typ, (paths, resource_root) in sorted(typ_paths.items()):\n        typ_classes[typ] = []\n        for path in paths:\n            name = _gen_class_name(path)\n            resource_path = os.path.join(resource_root, path)\n            alias = cfg.ALIASES[pvd].get(typ, {}).get(name)\n            typ_classes[typ].append(\n                {\"name\": name, \"alias\": alias, \"resource_path\": resource_path})\n    return tmpl.render(pvd=pvd, typ_classes=typ_classes)\n\n\ndef make_module(pvd: str, typ: str, classes: str) -> None:\n    \"\"\"Create a module file\"\"\"\n    mod_path = os.path.join(app_root_dir(pvd), f\"{typ}.py\")\n    with open(mod_path, \"w+\") as f:\n        f.write(classes)\n\n\ndef make_apidoc(pvd: str, content: str) -> None:\n    \"\"\"Create an api documentation file\"\"\"\n    mod_path = os.path.join(doc_root_dir(), f\"{pvd}.md\")\n    with open(mod_path, \"w+\") as f:\n        f.write(content)\n\n\ndef generate(pvd: str) -> None:\n    \"\"\"Generates a service node classes.\"\"\"\n    typ_paths = {}\n    base = base_dir()\n    for root, _, files in os.walk(resource_dir(pvd)):\n        # Extract the names and paths from resources.\n        files.sort()\n        pngs = list(filter(lambda f: f.endswith(\".png\"), files))\n        paths = list(filter(lambda f: \"rounded\" not in f, pngs))\n\n        # Skip the top-root directory.\n        typ = os.path.basename(root)\n        if typ == pvd:\n            continue\n\n        resource_root = os.path.relpath(root, base)\n        classes = gen_classes(pvd, typ, paths)\n        make_module(pvd, typ, classes)\n\n        typ_paths[typ] = (paths, resource_root)\n    # Build API documentation\n    apidoc = gen_apidoc(pvd, typ_paths)\n    make_apidoc(pvd, apidoc)\n\n\nif __name__ == \"__main__\":\n    pvd = sys.argv[1]\n    if pvd not in cfg.PROVIDERS:\n        sys.exit()\n    generate(pvd)\n"
  },
  {
    "path": "scripts/resource.py",
    "content": "\"\"\"\nresources.py provides useful tools for resources processing.\n\nThere are 2 commands available.\n- clean: clean and unify the resources file names with some rules.\n- round: generate the rounded images from the original squared images.\n\"\"\"\n\nimport os\nimport subprocess\nimport sys\n\nimport config as cfg\n\nfrom . import resource_dir\n\n_usage = \"Usage: resource.py <cmd> <pvd>\"\n\n\ndef cleaner_onprem(f):\n    f = f.replace(\"_\", \"-\")\n    return f.lower()\n\n\ndef cleaner_aws(f):\n    f = f.replace(\"_\", \"-\")\n    f = f.replace(\"@4x\", \"\")\n    f = f.replace(\"@5x\", \"\")\n    f = f.replace(\"2.0\", \"2-0\")\n    f = f.replace(\"-light-bg4x\", \"\")\n    f = f.replace(\"-light-bg\", \"\")\n    for p in cfg.FILE_PREFIXES[\"aws\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_azure(f):\n    f = f.replace(\"_\", \"-\")\n    f = f.replace(\"(\", \"\").replace(\")\", \"\")\n    f = \"-\".join(f.split())\n    for p in cfg.FILE_PREFIXES[\"azure\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_gcp(f):\n    f = f.replace(\"_\", \"-\")\n    f = \"-\".join(f.split())\n    for p in cfg.FILE_PREFIXES[\"gcp\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_ibm(f):\n    f = f.replace(\"_\", \"-\")\n    f = \"-\".join(f.split())\n    for p in cfg.FILE_PREFIXES[\"ibm\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_firebase(f):\n    f = f.replace(\"_\", \"-\")\n    f = \"-\".join(f.split())\n    for p in cfg.FILE_PREFIXES[\"firebase\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_k8s(f):\n    f = f.replace(\"-256\", \"\")\n    for p in cfg.FILE_PREFIXES[\"k8s\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_digitalocean(f):\n    f = f.replace(\"-32\", \"\")\n    for p in cfg.FILE_PREFIXES[\"digitalocean\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_alibabacloud(f):\n    for p in cfg.FILE_PREFIXES[\"alibabacloud\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_oci(f):\n    f = f.replace(\" \", \"-\")\n    f = f.replace(\"_\", \"-\")\n    for p in cfg.FILE_PREFIXES[\"oci\"]:\n        if f.startswith(p):\n            f = f[len(p):]\n            break\n    return f.lower()\n\n\ndef cleaner_programming(f):\n    return f.lower()\n\n\ndef cleaner_generic(f):\n    return f.lower()\n\n\ndef cleaner_saas(f):\n    return f.lower()\n\n\ndef cleaner_elastic(f):\n    return f.lower()\n\n\ndef cleaner_outscale(f):\n    return f.lower()\n\n\ndef cleaner_openstack(f):\n    return f.lower()\n\n\ndef cleaner_gis(f):\n    return f.lower()\n\n\ncleaners = {\n    \"onprem\": cleaner_onprem,\n    \"aws\": cleaner_aws,\n    \"azure\": cleaner_azure,\n    \"digitalocean\": cleaner_digitalocean,\n    \"gcp\": cleaner_gcp,\n    \"ibm\": cleaner_ibm,\n    \"firebase\": cleaner_firebase,\n    \"k8s\": cleaner_k8s,\n    \"alibabacloud\": cleaner_alibabacloud,\n    \"oci\": cleaner_oci,\n    \"programming\": cleaner_programming,\n    \"saas\": cleaner_saas,\n    \"elastic\": cleaner_elastic,\n    \"outscale\": cleaner_outscale,\n    \"generic\": cleaner_generic,\n    \"openstack\": cleaner_openstack,\n    \"gis\": cleaner_gis,\n}\n\n\ndef clean_png(pvd: str) -> None:\n    \"\"\"Refine the resources files names.\"\"\"\n\n    def _rename(base: str, png: str):\n        new = cleaners[pvd](png)\n        old_path = os.path.join(base, png)\n        new_path = os.path.join(base, new)\n        os.rename(old_path, new_path)\n\n    for root, _, files in os.walk(resource_dir(pvd)):\n        pngs = filter(lambda f: f.endswith(\".png\"), files)\n        [_rename(root, png) for png in pngs]\n\n\ndef round_png(pvd: str) -> None:\n    \"\"\"Round the images.\"\"\"\n\n    def _round(base: str, path: str):\n        path = os.path.join(base, path)\n        subprocess.run([cfg.CMD_ROUND, *cfg.CMD_ROUND_OPTS, path])\n\n    for root, _, files in os.walk(resource_dir(pvd)):\n        pngs = filter(lambda f: f.endswith(\".png\"), files)\n        paths = filter(lambda f: \"rounded\" not in f, pngs)\n        [_round(root, path) for path in paths]\n\n\ndef svg2png(pvd: str) -> None:\n    \"\"\"Convert the svg into png\"\"\"\n\n    def _convert(base: str, path: str):\n        path = os.path.join(base, path)\n        subprocess.run([cfg.CMD_SVG2PNG, *cfg.CMD_SVG2PNG_OPTS, path])\n        subprocess.run([\"rm\", path])\n\n    for root, _, files in os.walk(resource_dir(pvd)):\n        svgs = filter(lambda f: f.endswith(\".svg\"), files)\n        [_convert(root, path) for path in svgs]\n\n\ndef svg2png2(pvd: str) -> None:\n    \"\"\"Convert the svg into png using image magick\"\"\"\n\n    def _convert(base: str, path: str):\n        path_src = os.path.join(base, path)\n        path_dest = path_src.replace(\".svg\", \".png\")\n        subprocess.run([cfg.CMD_SVG2PNG_IM, *\n                        cfg.CMD_SVG2PNG_IM_OPTS, path_src, path_dest])\n        subprocess.run([\"rm\", path_src])\n\n    for root, _, files in os.walk(resource_dir(pvd)):\n        svgs = filter(lambda f: f.endswith(\".svg\"), files)\n        [_convert(root, path) for path in svgs]\n\n\n# fmt: off\ncommands = {\n    \"clean\": clean_png,\n    \"round\": round_png,\n    \"svg2png\": svg2png,\n    \"svg2png2\": svg2png2,\n}\n# fmt: on\n\nif __name__ == \"__main__\":\n    if len(sys.argv) < 3:\n        print(_usage)\n        sys.exit()\n\n    cmd = sys.argv[1]\n    pvd = sys.argv[2]\n    if cmd not in commands:\n        sys.exit()\n    if pvd not in cfg.PROVIDERS:\n        sys.exit()\n    commands[cmd](pvd)\n"
  },
  {
    "path": "templates/apidoc.tmpl",
    "content": "---\nid: {{ pvd }}\ntitle: {{ pvd|up_or_title(pvd) }}\n---\n\nNode classes list of the {{ pvd }} provider.\n{% for typ, classes in typ_classes.items() %}\n## {{ pvd }}.{{ typ }}\n{% for class in classes %}\n\n<img width=\"30\" src=\"/img/{{ class['resource_path'] }}\" alt=\"{{ class['name'] }}\" style=\"float: left; padding-right: 5px;\" >\n**diagrams.{{ pvd }}.{{ typ }}.{{ class['name'] }}**{% if class['alias'] %}, **{{ class['alias'] }}** (alias){% endif %}{% endfor %}\n{% endfor %}\n"
  },
  {
    "path": "templates/apidoc_custom.tmpl",
    "content": "---\nid: {{ pvd }}\ntitle: {{ pvd|up_or_title(pvd) }}\n---\n\nFor a full example check: [Here](https://diagrams.mingrammer.com/docs/getting-started/examples#rabbitmq-consumers-with-custom-nodes).\n"
  },
  {
    "path": "templates/module.tmpl",
    "content": "# This module is automatically generated by autogen.sh. DO NOT EDIT.\n\nfrom . import _{{ pvd|up_or_title(pvd) }}\n\nclass _{{ pvd|up_or_title(typ) }}(_{{ pvd|up_or_title(pvd) }}):\n    _type = \"{{ typ }}\"\n    _icon_dir = \"resources/{{ pvd }}/{{ typ }}\"\n\n{% for meta in metas %}\nclass {{ meta[\"name\"] }}(_{{ pvd|up_or_title(typ) }}):\n    _icon = \"{{ meta[\"icon\"] }}\"{% endfor %}\n\n# Aliases\n{% for svc, alias in aliases.items() %}\n{{ alias }} = {{ svc }}{% endfor %}\n"
  },
  {
    "path": "tests/__init__.py",
    "content": ""
  },
  {
    "path": "tests/test_c4.py",
    "content": "import os\nimport random\nimport string\nimport unittest\n\nfrom diagrams import Diagram, setcluster, setdiagram\nfrom diagrams.c4 import Container, Database, Person, Relationship, System, SystemBoundary\n\n\nclass C4Test(unittest.TestCase):\n    def setUp(self):\n        self.name = \"diagram-\" + \\\n            \"\".join([random.choice(string.hexdigits) for n in range(7)]).lower()\n\n    def tearDown(self):\n        setdiagram(None)\n        setcluster(None)\n        try:\n            os.remove(self.name + \".png\")\n        except FileNotFoundError:\n            pass\n\n    def test_nodes(self):\n        with Diagram(name=self.name, show=False):\n            person = Person(\"person\", \"A person.\")\n            container = Container(\n                \"container\",\n                \"Java application\",\n                \"The application.\")\n            database = Database(\n                \"database\",\n                \"Oracle database\",\n                \"Stores information.\")\n\n    def test_external_nodes(self):\n        with Diagram(name=self.name, show=False):\n            external_person = Person(\"person\", external=True)\n            external_system = System(\"external\", external=True)\n\n    def test_systems(self):\n        with Diagram(name=self.name, show=False):\n            system = System(\"system\", \"The internal system.\")\n            system_without_description = System(\"unknown\")\n\n    def test_edges(self):\n        with Diagram(name=self.name, show=False):\n            c1 = Container(\"container1\")\n            c2 = Container(\"container2\")\n\n            c1 >> c2\n\n    def test_edges_with_labels(self):\n        with Diagram(name=self.name, show=False):\n            c1 = Container(\"container1\")\n            c2 = Container(\"container2\")\n\n            c1 >> Relationship(\"depends on\") >> c2\n            c1 << Relationship(\"is depended on by\") << c2\n\n    def test_edge_without_constraint(self):\n        with Diagram(name=self.name, show=False):\n            s1 = System(\"system 1\")\n            s2 = System(\"system 2\")\n\n            s1 >> Relationship(constraint=\"False\") >> s2\n\n    def test_cluster(self):\n        with Diagram(name=self.name, show=False):\n            with SystemBoundary(\"System\"):\n                Container(\"container\", \"type\", \"description\")\n"
  },
  {
    "path": "tests/test_cli.py",
    "content": "import os\nimport unittest\nfrom io import StringIO\nfrom unittest.mock import mock_open, patch\n\nfrom diagrams.cli import run\n\n\nclass CliTest(unittest.TestCase):\n    def setUp(self):\n        self.test_file = \"test_diagram.py\"\n        # dummy content for the test file\n        self.test_content_1 = \"\"\"\nfrom diagrams import Diagram\nwith Diagram(name=\"Test\", show=False):\n    pass\n\"\"\"\n        # content from getting started examples with utf-8\n        # only support the installed fonts defined in Dockerfile\n        self.test_content_2 = \"\"\"\nfrom diagrams import Diagram\nfrom diagrams.aws.compute import EC2\nfrom diagrams.aws.database import RDS\nfrom diagrams.aws.network import ELB\n\nwith Diagram(\"test_2\", show=False, direction=\"TB\"):\n    ELB(\"lb\") >> [EC2(\"ワーカー１\"),\n                  EC2(\"작업자 2를\"),\n                  EC2(\"робітник 3\"),\n                  EC2(\"worker4\"),\n                  EC2(\"työntekijä 4\")] >> RDS(\"events\")\n\"\"\"\n\n    def tearDown(self):\n        try:\n            os.remove(\"test.png\")\n        except FileNotFoundError:\n            pass\n\n    def test_run_with_valid_file(self):\n        # write the test file\n        with open(self.test_file, \"w\") as f:\n            f.write(self.test_content_1)\n        with patch(\"sys.argv\", [\"diagrams\", self.test_file]):\n            exit_code = run()\n            self.assertEqual(exit_code, 0)\n        try:\n            os.remove(self.test_file)\n        except FileNotFoundError:\n            pass\n\n    def test_run_with_multiple_files(self):\n\n        multiple_files = [\"file1.py\", \"file2.py\"]\n\n        # write the code files\n        with open(\"file1.py\", \"w\") as f:\n            f.write(self.test_content_1)\n        with open(\"file2.py\", \"w\") as f:\n            f.write(self.test_content_2)\n\n        with patch(\"sys.argv\", [\"diagrams\"] + multiple_files):\n            exit_code = run()\n            self.assertEqual(exit_code, 0)\n\n        # cleanup code file\n        for one_file in multiple_files:\n            try:\n                os.remove(one_file)\n            except FileNotFoundError:\n                pass\n        # cleanup generated image\n        try:\n            os.remove(\"test_2.png\")\n        except FileNotFoundError:\n            pass\n\n    def test_run_with_no_arguments(self):\n        with patch(\"sys.argv\", [\"diagrams\"]):\n            with patch(\"sys.stderr\", new=StringIO()) as fake_stderr:\n                with self.assertRaises(SystemExit):\n                    run()\n                self.assertIn(\"the following arguments are required: path\", fake_stderr.getvalue())\n\n    def test_run_with_nonexistent_file(self):\n        with patch(\"sys.argv\", [\"diagrams\", \"nonexistent.py\"]):\n            with self.assertRaises(FileNotFoundError):\n                run()\n\n    def test_run_with_invalid_python_code(self):\n        invalid_content = \"this is not valid python code\"\n        with patch(\"builtins.open\", mock_open(read_data=invalid_content)):\n            with patch(\"sys.argv\", [\"diagrams\", self.test_file]):\n                with self.assertRaises(SyntaxError):\n                    run()\n"
  },
  {
    "path": "tests/test_diagram.py",
    "content": "import os\nimport pathlib\nimport shutil\nimport unittest\n\nfrom diagrams import Cluster, Diagram, Edge, Node, getcluster, getdiagram, setcluster, setdiagram\n\n\nclass DiagramTest(unittest.TestCase):\n    def setUp(self):\n        self.name = \"diagram_test\"\n\n    def tearDown(self):\n        setdiagram(None)\n        setcluster(None)\n        # Only some tests generate the image file.\n        try:\n            shutil.rmtree(self.name)\n        except OSError:\n            # Consider it file\n            try:\n                os.remove(self.name + \".png\")\n            except FileNotFoundError:\n                pass\n\n    def test_validate_direction(self):\n        # Normal directions.\n        for dir in (\"TB\", \"BT\", \"LR\", \"RL\", \"tb\"):\n            Diagram(direction=dir)\n\n        # Invalid directions.\n        for dir in (\"BR\", \"TL\", \"Unknown\"):\n            with self.assertRaises(ValueError):\n                Diagram(direction=dir)\n\n    def test_validate_curvestyle(self):\n        # Normal curvestyles.\n        for cvs in (\"ortho\", \"curved\", \"spline\", \"polyline\", \"CURVED\"):\n            Diagram(curvestyle=cvs)\n\n        # Invalid curvestyles.\n        for cvs in (\"tangent\", \"unknown\"):\n            with self.assertRaises(ValueError):\n                Diagram(curvestyle=cvs)\n\n    def test_validate_theme(self):\n        # Valid themes.\n        for theme in (\"neutral\", \"pastel\", \"blues\", \"greens\", \"orange\"):\n            Diagram(theme=theme)\n\n        # Invalid themes.\n        for theme in (\"dark\", \"unknown\"):\n            with self.assertRaises(ValueError):\n                Diagram(theme=theme)\n\n    def test_validate_outformat(self):\n        # Normal output formats.\n        for fmt in (\"png\", \"jpg\", \"svg\", \"pdf\", \"PNG\", \"dot\"):\n            Diagram(outformat=fmt)\n\n        # Invalid output formats.\n        for fmt in (\"pnp\", \"jpe\", \"unknown\"):\n            with self.assertRaises(ValueError):\n                Diagram(outformat=fmt)\n\n    def test_with_global_context(self):\n        self.assertIsNone(getdiagram())\n        with Diagram(name=os.path.join(self.name, \"with_global_context\"), show=False):\n            self.assertIsNotNone(getdiagram())\n        self.assertIsNone(getdiagram())\n\n    def test_node_not_in_diagram(self):\n        # Node must be belong to a diagrams.\n        with self.assertRaises(EnvironmentError):\n            Node(\"node\")\n\n    def test_node_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_node\"), show=False):\n            node1 = Node(\"node1\")\n            node2 = Node(\"node2\")\n            self.assertEqual(node1 - node2, node2)\n            self.assertEqual(node1 >> node2, node2)\n            self.assertEqual(node1 << node2, node2)\n\n    def test_node_to_nodes(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_nodes\"), show=False):\n            node1 = Node(\"node1\")\n            nodes = [Node(\"node2\"), Node(\"node3\")]\n            self.assertEqual(node1 - nodes, nodes)\n            self.assertEqual(node1 >> nodes, nodes)\n            self.assertEqual(node1 << nodes, nodes)\n\n    def test_nodes_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node\"), show=False):\n            node1 = Node(\"node1\")\n            nodes = [Node(\"node2\"), Node(\"node3\")]\n            self.assertEqual(nodes - node1, node1)\n            self.assertEqual(nodes >> node1, node1)\n            self.assertEqual(nodes << node1, node1)\n\n    def test_default_filename(self):\n        self.name = \"example_1\"\n        with Diagram(name=\"Example 1\", show=False):\n            Node(\"node1\")\n        self.assertTrue(os.path.exists(f\"{self.name}.png\"))\n\n    def test_custom_filename(self):\n        self.name = \"my_custom_name\"\n        with Diagram(name=\"Example 1\", filename=self.name, show=False):\n            Node(\"node1\")\n        self.assertTrue(os.path.exists(f\"{self.name}.png\"))\n\n    def test_empty_name(self):\n        \"\"\"Check that providing an empty name don't crash, but save in a diagrams_image.xxx file.\"\"\"\n        self.name = \"diagrams_image\"\n        with Diagram(show=False):\n            Node(\"node1\")\n        self.assertTrue(os.path.exists(f\"{self.name}.png\"))\n\n    def test_autolabel(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node\"), show=False):\n            node1 = Node(\"node1\")\n            self.assertTrue(node1.label, \"Node\\nnode1\")\n\n    def test_outformat_list(self):\n        \"\"\"Check that outformat render all the files from the list.\"\"\"\n        self.name = \"diagrams_image\"\n        with Diagram(show=False, outformat=[\"dot\", \"png\"]):\n            Node(\"node1\")\n        # both files must exist\n        self.assertTrue(os.path.exists(f\"{self.name}.png\"))\n        self.assertTrue(os.path.exists(f\"{self.name}.dot\"))\n\n        # clean the dot file as it only generated here\n        os.remove(self.name + \".dot\")\n\n\nclass ClusterTest(unittest.TestCase):\n    def setUp(self):\n        self.name = \"cluster_test\"\n\n    def tearDown(self):\n        setdiagram(None)\n        setcluster(None)\n        # Only some tests generate the image file.\n        try:\n            shutil.rmtree(self.name)\n        except OSError:\n            pass\n\n    def test_validate_direction(self):\n        # Normal directions.\n        for dir in (\"TB\", \"BT\", \"LR\", \"RL\"):\n            with Diagram(name=os.path.join(self.name, \"validate_direction\"), show=False):\n                Cluster(direction=dir)\n\n        # Invalid directions.\n        for dir in (\"BR\", \"TL\", \"Unknown\"):\n            with self.assertRaises(ValueError):\n                with Diagram(name=os.path.join(self.name, \"validate_direction\"), show=False):\n                    Cluster(direction=dir)\n\n    def test_with_global_context(self):\n        with Diagram(name=os.path.join(self.name, \"with_global_context\"), show=False):\n            self.assertIsNone(getcluster())\n            with Cluster():\n                self.assertIsNotNone(getcluster())\n            self.assertIsNone(getcluster())\n\n    def test_with_nested_cluster(self):\n        with Diagram(name=os.path.join(self.name, \"with_nested_cluster\"), show=False):\n            self.assertIsNone(getcluster())\n            with Cluster() as c1:\n                self.assertEqual(c1, getcluster())\n                with Cluster() as c2:\n                    self.assertEqual(c2, getcluster())\n                self.assertEqual(c1, getcluster())\n            self.assertIsNone(getcluster())\n\n    def test_node_not_in_diagram(self):\n        # Node must be belong to a diagrams.\n        with self.assertRaises(EnvironmentError):\n            Node(\"node\")\n\n    def test_node_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_node\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                node2 = Node(\"node2\")\n                self.assertEqual(node1 - node2, node2)\n                self.assertEqual(node1 >> node2, node2)\n                self.assertEqual(node1 << node2, node2)\n\n    def test_node_to_nodes(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_nodes\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(node1 - nodes, nodes)\n                self.assertEqual(node1 >> nodes, nodes)\n                self.assertEqual(node1 << nodes, nodes)\n\n    def test_nodes_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(nodes - node1, node1)\n                self.assertEqual(nodes >> node1, node1)\n                self.assertEqual(nodes << node1, node1)\n\n\nclass EdgeTest(unittest.TestCase):\n    def setUp(self):\n        self.name = \"edge_test\"\n\n    def tearDown(self):\n        setdiagram(None)\n        setcluster(None)\n        # Only some tests generate the image file.\n        try:\n            shutil.rmtree(self.name)\n        except OSError:\n            pass\n\n    def test_node_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_node\"), show=False):\n            node1 = Node(\"node1\")\n            node2 = Node(\"node2\")\n            self.assertEqual(node1 - Edge(color=\"red\") - node2, node2)\n\n    def test_node_to_nodes(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_nodes\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(node1 - Edge(color=\"red\") - nodes, nodes)\n\n    def test_nodes_to_node(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(nodes - Edge(color=\"red\") - node1, node1)\n\n    def test_nodes_to_node_with_additional_attributes(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_additional_attributes\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(\n                    nodes -\n                    Edge(\n                        color=\"red\") -\n                    Edge(\n                        color=\"green\") -\n                    node1,\n                    node1)\n\n    def test_node_to_node_with_attributes(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_node_with_attributes\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                node2 = Node(\"node2\")\n                self.assertEqual(\n                    node1 << Edge(\n                        color=\"red\",\n                        label=\"1.1\") << node2,\n                    node2)\n                self.assertEqual(\n                    node1 >> Edge(\n                        color=\"green\",\n                        label=\"1.2\") >> node2,\n                    node2)\n                self.assertEqual(\n                    node1 << Edge(\n                        color=\"blue\",\n                        label=\"1.3\") >> node2,\n                    node2)\n\n    def test_node_to_node_with_additional_attributes(self):\n        with Diagram(name=os.path.join(self.name, \"node_to_node_with_additional_attributes\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                node2 = Node(\"node2\")\n                self.assertEqual(\n                    node1 << Edge(\n                        color=\"red\",\n                        label=\"2.1\") << Edge(\n                        color=\"blue\") << node2,\n                    node2)\n                self.assertEqual(\n                    node1 >> Edge(\n                        color=\"green\",\n                        label=\"2.2\") >> Edge(\n                        color=\"red\") >> node2,\n                    node2)\n                self.assertEqual(\n                    node1 << Edge(\n                        color=\"blue\",\n                        label=\"2.3\") >> Edge(\n                        color=\"black\") >> node2,\n                    node2)\n\n    def test_nodes_to_node_with_attributes_loop(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_attributes_loop\"), show=False):\n            with Cluster():\n                node = Node(\"node\")\n                self.assertEqual(\n                    node >> Edge(\n                        color=\"red\",\n                        label=\"3.1\") >> node,\n                    node)\n                self.assertEqual(\n                    node << Edge(\n                        color=\"green\",\n                        label=\"3.2\") << node,\n                    node)\n                self.assertEqual(\n                    node >> Edge(\n                        color=\"blue\",\n                        label=\"3.3\") << node,\n                    node)\n                self.assertEqual(\n                    node << Edge(\n                        color=\"pink\",\n                        label=\"3.4\") >> node,\n                    node)\n\n    def test_nodes_to_node_with_attributes_bothdirectional(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_attributes_bothdirectional\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(\n                    nodes << Edge(\n                        color=\"green\",\n                        label=\"4\") >> node1,\n                    node1)\n\n    def test_nodes_to_node_with_attributes_bidirectional(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_attributes_bidirectional\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(\n                    nodes << Edge(\n                        color=\"blue\",\n                        label=\"5\") >> node1,\n                    node1)\n\n    def test_nodes_to_node_with_attributes_onedirectional(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_attributes_onedirectional\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(\n                    nodes >> Edge(\n                        color=\"red\",\n                        label=\"6.1\") >> node1,\n                    node1)\n                self.assertEqual(\n                    nodes << Edge(\n                        color=\"green\",\n                        label=\"6.2\") << node1,\n                    node1)\n\n    def test_nodes_to_node_with_additional_attributes_directional(self):\n        with Diagram(name=os.path.join(self.name, \"nodes_to_node_with_additional_attributes_directional\"), show=False):\n            with Cluster():\n                node1 = Node(\"node1\")\n                nodes = [Node(\"node2\"), Node(\"node3\")]\n                self.assertEqual(\n                    nodes >> Edge(\n                        color=\"red\",\n                        label=\"6.1\") >> Edge(\n                        color=\"blue\",\n                        label=\"6.2\") >> node1,\n                    node1)\n                self.assertEqual(\n                    nodes << Edge(\n                        color=\"green\",\n                        label=\"6.3\") << Edge(\n                        color=\"pink\",\n                        label=\"6.4\") << node1,\n                    node1)\n\n\nclass ResourcesTest(unittest.TestCase):\n    def test_folder_depth(self):\n        \"\"\"\n        The code currently only handles resource folders up to a dir depth of 2\n        i.e. resources/<provider>/<type>/<image>, so check that this depth isn't\n        exceeded.\n        \"\"\"\n        resources_dir = pathlib.Path(__file__).parent.parent / \"resources\"\n        max_depth = max(\n            os.path.relpath(\n                d,\n                resources_dir).count(\n                os.sep) +\n            1 for d,\n            _,\n            _ in os.walk(resources_dir))\n        self.assertLessEqual(max_depth, 2)\n\n    def test_resources_exist_and_render(self):\n        \"\"\"\n        Test that resources directory exists and icons can be loaded for rendering.\n        This ensures the package build includes all necessary resource files.\n        \"\"\"\n        from diagrams.aws.compute import EC2\n        from diagrams.aws.database import RDS\n\n        # Verify resources directory exists\n        resources_dir = pathlib.Path(__file__).parent.parent / \"resources\"\n        self.assertTrue(resources_dir.exists(), \"resources directory should exist\")\n\n        # Verify AWS resources exist (sample check)\n        aws_compute_dir = resources_dir / \"aws\" / \"compute\"\n        self.assertTrue(aws_compute_dir.exists(), \"AWS compute resources should exist\")\n\n        # Verify icon files exist\n        ec2_icon = aws_compute_dir / \"ec2.png\"\n        self.assertTrue(ec2_icon.exists(), \"EC2 icon should exist\")\n\n        # Test that nodes can load their icons\n        test_diagram_name = \"test_resources_render\"\n        try:\n            with Diagram(test_diagram_name, show=False):\n                ec2_node = EC2(\"test-ec2\")\n                rds_node = RDS(\"test-rds\")\n\n                # Verify nodes have icon attributes set\n                self.assertIsNotNone(ec2_node._icon, \"EC2 node should have an icon\")\n                self.assertIsNotNone(rds_node._icon, \"RDS node should have an icon\")\n\n                # Verify icon paths are valid\n                ec2_icon_path = ec2_node._load_icon()\n                rds_icon_path = rds_node._load_icon()\n\n                self.assertTrue(os.path.exists(ec2_icon_path),\n                                f\"EC2 icon path should exist: {ec2_icon_path}\")\n                self.assertTrue(os.path.exists(rds_icon_path),\n                                f\"RDS icon path should exist: {rds_icon_path}\")\n        finally:\n            # Clean up generated files\n            try:\n                os.remove(test_diagram_name + \".png\")\n            except FileNotFoundError:\n                pass\n"
  },
  {
    "path": "website/core/Footer.js",
    "content": "/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst React = require('react');\n\nclass Footer extends React.Component {\n  docUrl(doc, language) {\n    const baseUrl = this.props.config.baseUrl;\n    const docsUrl = this.props.config.docsUrl;\n    const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;\n    const langPart = `${language ? `${language}/` : ''}`;\n    return `${baseUrl}${docsPart}${langPart}${doc}`;\n  }\n\n  pageUrl(doc, language) {\n    const baseUrl = this.props.config.baseUrl;\n    return baseUrl + (language ? `${language}/` : '') + doc;\n  }\n\n  render() {\n    return (\n      <footer className=\"nav-footer\" id=\"footer\">\n        <section className=\"sitemap\">\n          <a href={this.props.config.baseUrl} className=\"nav-home\">\n            {this.props.config.footerIcon && (\n              <img\n                src={this.props.config.baseUrl + this.props.config.footerIcon}\n                alt={this.props.config.title}\n                width=\"66\"\n                height=\"58\"\n              />\n            )}\n          </a>\n          <div>\n            <h5>Docs</h5>\n            <a href={this.docUrl('getting-started/installation')}>\n              Getting Started\n            </a>\n            <a href={this.docUrl('guides/diagram')}>\n              Guides\n            </a>\n            <a href={this.docUrl('nodes/aws')}>\n              Nodes\n            </a>\n          </div>\n          <div>\n            <h5>More</h5>\n            <iframe src=\"https://ghbtns.com/github-btn.html?user=mingrammer&repo=diagrams&type=star&count=true&size=large\" frameBorder=\"0\" scrolling=\"0\" width=\"170\" height=\"30\" title=\"Star mingrammer/diagrams on GitHub\"></iframe>\n          </div>\n          </section>\n        <section className=\"copyright\">{this.props.config.copyright}</section>\n      </footer>\n    );\n  }\n}\n\nmodule.exports = Footer;\n"
  },
  {
    "path": "website/i18n/en.json",
    "content": "{\n  \"_comment\": \"This file is auto-generated by write-translations.js\",\n  \"localized-strings\": {\n    \"next\": \"Next\",\n    \"previous\": \"Previous\",\n    \"tagline\": \"Diagram as Code\",\n    \"docs\": {\n      \"getting-started/examples\": {\n        \"title\": \"Examples\"\n      },\n      \"getting-started/installation\": {\n        \"title\": \"Installation\"\n      },\n      \"guides/cluster\": {\n        \"title\": \"Clusters\"\n      },\n      \"guides/diagram\": {\n        \"title\": \"Diagrams\"\n      },\n      \"guides/edge\": {\n        \"title\": \"Edges\"\n      },\n      \"guides/node\": {\n        \"title\": \"Nodes\"\n      },\n      \"nodes/alibabacloud\": {\n        \"title\": \"AlibabaCloud\"\n      },\n      \"nodes/aws\": {\n        \"title\": \"AWS\"\n      },\n      \"nodes/azure\": {\n        \"title\": \"Azure\"\n      },\n      \"nodes/c4\": {\n        \"title\": \"C4\"\n      },\n      \"nodes/custom\": {\n        \"title\": \"Custom\"\n      },\n      \"nodes/digitalocean\": {\n        \"title\": \"DigitalOcean\"\n      },\n      \"nodes/elastic\": {\n        \"title\": \"Elastic\"\n      },\n      \"nodes/firebase\": {\n        \"title\": \"Firebase\"\n      },\n      \"nodes/gcp\": {\n        \"title\": \"GCP\"\n      },\n      \"nodes/generic\": {\n        \"title\": \"Generic\"\n      },\n      \"nodes/gis\": {\n        \"title\": \"GIS\"\n      },\n      \"nodes/ibm\": {\n        \"title\": \"IBM\"\n      },\n      \"nodes/k8s\": {\n        \"title\": \"K8S\"\n      },\n      \"nodes/oci\": {\n        \"title\": \"OCI\"\n      },\n      \"nodes/onprem\": {\n        \"title\": \"OnPrem\"\n      },\n      \"nodes/openstack\": {\n        \"title\": \"OpenStack\"\n      },\n      \"nodes/outscale\": {\n        \"title\": \"Outscale\"\n      },\n      \"nodes/programming\": {\n        \"title\": \"Programming\"\n      },\n      \"nodes/saas\": {\n        \"title\": \"Saas\"\n      }\n    },\n    \"links\": {\n      \"Docs\": \"Docs\",\n      \"Guides\": \"Guides\",\n      \"Nodes\": \"Nodes\",\n      \"GitHub\": \"GitHub\",\n      \"Sponsoring\": \"Sponsoring\"\n    },\n    \"categories\": {\n      \"Getting Started\": \"Getting Started\",\n      \"Guides\": \"Guides\",\n      \"Nodes\": \"Nodes\"\n    }\n  },\n  \"pages-strings\": {\n    \"Help Translate|recruit community translators for your project\": \"Help Translate\",\n    \"Edit this Doc|recruitment message asking to edit the doc source\": \"Edit\",\n    \"Translate this Doc|recruitment message asking to translate the docs\": \"Translate\"\n  }\n}\n"
  },
  {
    "path": "website/package.json",
    "content": "{\n  \"scripts\": {\n    \"examples\": \"docusaurus-examples\",\n    \"start\": \"docusaurus-start\",\n    \"build\": \"docusaurus-build\",\n    \"publish-gh-pages\": \"docusaurus-publish\",\n    \"write-translations\": \"docusaurus-write-translations\",\n    \"version\": \"docusaurus-version\",\n    \"rename-version\": \"docusaurus-rename-version\"\n  },\n  \"devDependencies\": {\n    \"docusaurus\": \"^1.14.7\"\n  },\n  \"dependencies\": {\n    \"minimist\": \"^1.2.7\"\n  }\n}\n"
  },
  {
    "path": "website/pages/en/index.js",
    "content": "/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nconst React = require('react');\n\nconst CompLibrary = require('../../core/CompLibrary.js');\n\nconst MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */\nconst Container = CompLibrary.Container;\nconst GridBlock = CompLibrary.GridBlock;\n\nclass HomeSplash extends React.Component {\n  render() {\n    const {siteConfig, language = ''} = this.props;\n    const {baseUrl, docsUrl} = siteConfig;\n    const docsPart = `${docsUrl ? `${docsUrl}/` : ''}`;\n    const langPart = `${language ? `${language}/` : ''}`;\n    const docUrl = doc => `${baseUrl}${docsPart}${langPart}${doc}`;\n\n    const SplashContainer = props => (\n      <div className=\"homeContainer\">\n        <div className=\"homeSplashFade\">\n          <div className=\"wrapper homeWrapper\">{props.children}</div>\n        </div>\n      </div>\n    );\n\n    const Logo = props => (\n      <div className=\"projectLogo\">\n        <img src={props.img_src} alt=\"Project Logo\" />\n      </div>\n    );\n\n    const ProjectTitle = props => (\n      <h2 className=\"projectTitle\">\n        {props.title}\n        <small>{props.tagline}</small>\n      </h2>\n    );\n\n    const PromoSection = props => (\n      <div className=\"section promoSection\">\n        <div className=\"promoRow\">\n          <div className=\"pluginRowBlock\">{props.children}</div>\n        </div>\n      </div>\n    );\n\n    const Button = props => (\n      <div className=\"pluginWrapper buttonWrapper\">\n        <a className=\"button\" href={props.href} target={props.target}>\n          {props.children}\n        </a>\n      </div>\n    );\n\n    return (\n      <SplashContainer>\n        <Logo img_src={`${baseUrl}img/diagrams.png`} />\n        <div className=\"inner\">\n          <ProjectTitle tagline={siteConfig.tagline} title={siteConfig.title} />\n          <PromoSection>\n            <Button href={docUrl('getting-started/installation')}>Try It Out</Button>\n            <Button href={docUrl('getting-started/examples')}>Show Examples</Button>\n          </PromoSection>\n        </div>\n      </SplashContainer>\n    );\n  }\n}\n\nclass Index extends React.Component {\n  render() {\n    const {config: siteConfig, language = ''} = this.props;\n    const {baseUrl} = siteConfig;\n\n    const Block = props => (\n      <Container\n        padding={['bottom', 'top']}\n        id={props.id}\n        background={props.background}>\n        <GridBlock\n          align=\"center\"\n          contents={props.children}\n          layout={props.layout}\n        />\n      </Container>\n    );\n\n    const About = () => (\n      <div\n        className=\"productShowcaseSection paddingBottom\"\n        style={{textAlign: 'center'}}>\n        <h2>About Diagrams</h2>\n        <MarkdownBlock>\n            Diagrams lets you draw the cloud system architecture **in Python code**.\n        </MarkdownBlock>\n        <MarkdownBlock>\n            It was born for **prototyping** a new system architecture without any design tools. You can also describe or visualize the existing system architecture as well.\n        </MarkdownBlock>\n        <MarkdownBlock>\n            `Diagram as Code` allows you to **track** the architecture diagram changes in any **version control** system.\n        </MarkdownBlock>\n        <MarkdownBlock>\n            Diagrams currently supports main major providers including: `AWS`, `Azure`, `GCP`, `Kubernetes`, `Alibaba Cloud`, `Oracle Cloud` etc... It also supports `On-Premises` nodes, `SaaS` and major `Programming` frameworks and languages.\n        </MarkdownBlock>\n        <MarkdownBlock>\n            `NOTE: It does not control any actual cloud resources nor does it generate cloud formation or terraform code. It is just for drawing the cloud system architecture diagrams.`\n        </MarkdownBlock>\n      </div>\n    );\n\n    const Example = () => (\n      <Block>\n        {[\n          {\n            image: `${baseUrl}img/message_collecting_code.png`,\n            imageAlign: 'left',\n          },\n          {\n            image: `${baseUrl}img/message_collecting_diagram.png`,\n            imageAlign: 'right',\n          },\n        ]}\n      </Block>\n    );\n\n    const Example2 = () => (\n      <Block>\n        {[\n          {\n            image: `${baseUrl}img/event_processing_code.png`,\n              imageAlign: 'left',\n          },\n          {\n            image: `${baseUrl}img/event_processing_diagram.png`,\n              imageAlign: 'right',\n          },\n        ]}\n      </Block>\n    );\n\n    return (\n      <div>\n        <HomeSplash siteConfig={siteConfig} language={language} />\n        <div className=\"mainContainer\">\n          <About />\n          <Example />\n          <Example2 />\n        </div>\n      </div>\n    );\n  }\n}\n\nmodule.exports = Index;\n"
  },
  {
    "path": "website/publish.sh",
    "content": "#!/bin/bash\nGIT_USER=mingrammer CURRENT_BRANCH=master USE_SSH=true yarn run publish-gh-pages\n"
  },
  {
    "path": "website/sidebars.json",
    "content": "{\n  \"docs\": {\n    \"Getting Started\": [\n      \"getting-started/installation\",\n      \"getting-started/examples\"\n    ],\n    \"Guides\": [\n      \"guides/diagram\",\n      \"guides/node\",\n      \"guides/cluster\",\n      \"guides/edge\"\n    ],\n    \"Nodes\": [\n      \"nodes/onprem\",\n      \"nodes/aws\",\n      \"nodes/azure\",\n      \"nodes/gcp\",\n      \"nodes/ibm\",\n      \"nodes/k8s\",\n      \"nodes/alibabacloud\",\n      \"nodes/oci\",\n      \"nodes/openstack\",\n      \"nodes/firebase\",\n      \"nodes/digitalocean\",\n      \"nodes/elastic\",\n      \"nodes/outscale\",\n      \"nodes/generic\",\n      \"nodes/programming\",\n      \"nodes/saas\",\n      \"nodes/c4\",\n      \"nodes/custom\",\n      \"nodes/gis\"\n    ]\n  }\n}\n"
  },
  {
    "path": "website/siteConfig.js",
    "content": "/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// See https://docusaurus.io/docs/site-config for all the possible\n// site configuration options.\n\nconst siteConfig = {\n  title: 'Diagrams',\n  tagline: 'Diagram as Code',\n  url: 'https://diagrams.mingrammer.com',\n  baseUrl: '/',\n  cname: 'diagrams.mingrammer.com',\n  projectName: 'diagrams',\n  organizationName: 'mingrammer',\n\n  headerLinks: [\n    {doc: 'getting-started/installation', label: 'Docs'},\n    {doc: 'guides/diagram', label: 'Guides'},\n    {doc: 'nodes/aws', label: 'Nodes'},\n    {href: 'https://github.com/mingrammer/diagrams', label: 'GitHub'},\n    {href: 'https://www.buymeacoffee.com/mingrammer', label: 'Sponsoring'},\n  ],\n\n  headerIcon: 'img/diagrams.ico',\n  footerIcon: 'img/diagrams.ico',\n  favicon: 'img/diagrams.ico',\n\n  colors: {\n    primaryColor: '#5E73E5',\n    secondaryColor: '#5E89E5',\n  },\n\n  copyright: `Copyright © ${new Date().getFullYear()} mingrammer`,\n\n  highlight: {\n    // Highlight.js theme to use for syntax highlighting in code blocks.\n    theme: 'default',\n  },\n\n  // Add custom scripts here that would be placed in <script> tags.\n  scripts: ['https://buttons.github.io/buttons.js'],\n\n  // On page navigation for the current documentation page.\n  onPageNav: 'separate',\n  cleanUrl: true,\n\n  // Open Graph and Twitter card images.\n  facebookComments: false,\n  twitterImage: 'img/diagrams.png',\n  ogImage: 'img/diagrams.png',\n\n  docsSideNavCollapsible: false,\n\n  enableUpdateTime: true,\n\n  gaTrackingId: 'UA-84081627-3',\n};\n\nmodule.exports = siteConfig;\n"
  },
  {
    "path": "website/static/css/custom.css",
    "content": "/**\n * Copyright (c) 2017-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n/* your custom css */\n\n@media only screen and (min-device-width: 360px) and (max-device-width: 736px) {\n}\n\n@media only screen and (min-width: 1024px) {\n}\n\n@media only screen and (max-width: 1023px) {\n}\n\n@media only screen and (min-width: 1400px) {\n}\n\n@media only screen and (min-width: 1500px) {\n}\n\n#buymeacoffee {\n    height: 50px;\n}\n"
  }
]