Skip to main content

Overview

Xloud Orchestration supports over 100 built-in resource types covering the full range of cloud infrastructure. Each resource type maps to a specific cloud service API. The Orchestration engine provisions resources in dependency order and tracks their lifecycle as part of the parent stack.
Resource type names use the Xloud::Service::ResourceType convention. Available resource types depend on the services enabled in your cluster.

Resource Categories

CategoryServiceCommon Resource Types
ComputeXloud ComputeServer, KeyPair, ServerGroup
NetworkingXloud NetworkingNet, Subnet, Router, RouterInterface, FloatingIP, SecurityGroup, Port
StorageXloud Block StorageVolume, VolumeAttachment
IdentityXloud IdentityProject, User, Role
OrchestrationXloud OrchestrationStack, WaitCondition, AutoScalingGroup, ScalingPolicy

Resource Definition Structure

Every resource follows this structure:
resource-structure.yaml
resources:
  logical_resource_name:
    type: Xloud::Service::ResourceType    # Required
    depends_on:                           # Optional — explicit ordering
      - other_resource_name
    condition: my_condition               # Optional — conditional creation
    deletion_policy: Delete               # Optional — Retain | Snapshot | Delete
    properties:                           # Required — resource configuration
      property_name: value
      property_from_param: { get_param: param_name }
      property_from_resource: { get_resource: other_resource }
    metadata:                             # Optional — arbitrary key-value data
      custom_key: custom_value

depends_on and Dependency Resolution

The engine automatically detects dependencies from intrinsic functions like get_resource and get_attr. Use depends_on only for ordering requirements that cannot be expressed through property references.
explicit-dependency.yaml
resources:
  network:
    type: Xloud::Networking::Net
    properties:
      name: app-network

  subnet:
    type: Xloud::Networking::Subnet
    depends_on: [network]               # Wait for network before creating subnet
    properties:
      network_id: { get_resource: network }
      cidr: "10.0.1.0/24"

Resource Examples by Category

Xloud::Compute::Server

compute-server.yaml
resources:
  web_server:
    type: Xloud::Compute::Server
    properties:
      name: web-server
      image: { get_param: image }
      flavor: { get_param: flavor }
      key_name: { get_param: key_name }
      security_groups:
        - { get_resource: web_sg }
      networks:
        - network: { get_param: network }
      user_data_format: RAW
      user_data: |
        #!/bin/bash
        apt-get install -y nginx
        systemctl enable --now nginx

Xloud::Compute::KeyPair

keypair.yaml
resources:
  deploy_key:
    type: Xloud::Compute::KeyPair
    properties:
      name: deploy-key
      save_private_key: true   # Private key returned as stack output

outputs:
  private_key:
    value: { get_attr: [deploy_key, private_key] }

Xloud::Compute::ServerGroup

server-group.yaml
resources:
  anti_affinity_group:
    type: Xloud::Compute::ServerGroup
    properties:
      name: web-anti-affinity
      policies:
        - anti-affinity     # Spread instances across different hosts

Xloud::Networking::Net

network.yaml
resources:
  app_network:
    type: Xloud::Networking::Net
    properties:
      name: app-network
      admin_state_up: true

Xloud::Networking::Subnet

subnet.yaml
resources:
  app_subnet:
    type: Xloud::Networking::Subnet
    properties:
      name: app-subnet
      network_id: { get_resource: app_network }
      cidr: "192.168.10.0/24"
      ip_version: 4
      dns_nameservers:
        - "8.8.8.8"
        - "1.1.1.1"
      enable_dhcp: true

Xloud::Networking::Router and RouterInterface

router.yaml
resources:
  router:
    type: Xloud::Networking::Router
    properties:
      name: app-router
      external_gateway_info:
        network: { get_param: external_network }

  router_interface:
    type: Xloud::Networking::RouterInterface
    properties:
      router_id: { get_resource: router }
      subnet_id: { get_resource: app_subnet }

Xloud::Networking::FloatingIP

floating-ip.yaml
resources:
  floating_ip:
    type: Xloud::Networking::FloatingIP
    properties:
      floating_network: { get_param: external_network }

  floating_ip_assoc:
    type: Xloud::Networking::FloatingIPAssociation
    properties:
      floatingip_id: { get_resource: floating_ip }
      port_id: { get_attr: [web_server, addresses, app-network, 0, port] }

Xloud::Networking::SecurityGroup

security-group.yaml
resources:
  web_sg:
    type: Xloud::Networking::SecurityGroup
    properties:
      name: web-security-group
      description: Allow HTTP, HTTPS, and SSH
      rules:
        - protocol: tcp
          port_range_min: 22
          port_range_max: 22
          remote_ip_prefix: "0.0.0.0/0"
        - protocol: tcp
          port_range_min: 80
          port_range_max: 80
          remote_ip_prefix: "0.0.0.0/0"
        - protocol: tcp
          port_range_min: 443
          port_range_max: 443
          remote_ip_prefix: "0.0.0.0/0"

Xloud::BlockStorage::Volume

volume.yaml
resources:
  data_volume:
    type: Xloud::BlockStorage::Volume
    properties:
      name: app-data
      size: 100          # GB
      volume_type: ceph-ssd
      description: Application data volume

Xloud::BlockStorage::VolumeAttachment

volume-attachment.yaml
resources:
  data_volume_attach:
    type: Xloud::BlockStorage::VolumeAttachment
    properties:
      instance_uuid: { get_resource: web_server }
      volume_id: { get_resource: data_volume }
      mountpoint: /dev/vdb

Xloud::Identity::Project

project.yaml
resources:
  app_project:
    type: Xloud::Identity::Project
    properties:
      name: my-app-project
      description: Project for the application team
      enabled: true

Xloud::Identity::User

user.yaml
resources:
  svc_user:
    type: Xloud::Identity::User
    properties:
      name: svc-deployer
      password: { get_param: svc_password }
      email: svc-deployer@example.com
      enabled: true

Xloud::Orchestration::Stack (Nested Stack)

nested-stack.yaml
resources:
  database_tier:
    type: Xloud::Orchestration::Stack
    properties:
      template: { get_file: database-stack.yaml }
      parameters:
        flavor: { get_param: db_flavor }
        network: { get_resource: app_network }

Xloud::Orchestration::WaitCondition

Use WaitCondition to pause stack creation until an external signal is received (e.g., after cloud-init completes application installation):
wait-condition.yaml
resources:
  wait_handle:
    type: Xloud::Orchestration::WaitConditionHandle

  app_ready:
    type: Xloud::Orchestration::WaitCondition
    depends_on: [app_server]
    properties:
      handle: { get_resource: wait_handle }
      timeout: 300          # Seconds to wait for signal
      count: 1

  app_server:
    type: Xloud::Compute::Server
    properties:
      user_data:
        str_replace:
          template: |
            #!/bin/bash
            apt-get install -y myapp
            # Signal completion
            curl -X POST "$WAIT_URL" -d '{"Status": "SUCCESS", "UniqueId": "app"}'
          params:
            $WAIT_URL: { get_resource: wait_handle }

Next Steps

Template Guide

Template structure, parameters, intrinsic functions, and conditions

Auto-Scaling

Auto-scaling group and scaling policy resource examples

Manage Stacks

Create, update, and manage the stack lifecycle

Troubleshooting

Diagnose resource provisioning failures and dependency errors