> For the complete documentation index, see [llms.txt](https://docs.parallels.com/landing/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.parallels.com/landing/ras-cpf-integration-guide/custom-provider-framework/capabilities.md).

# Capabilities

<table data-header-hidden="false" data-header-sticky><thead><tr><th>Capability</th><th>Description</th><th>Type</th></tr></thead><tbody><tr><td>"can_suspend_guests"</td><td>Supports suspend guest control</td><td><p>Boolean</p><ul><li>true can suspend guests</li><li>false otherwise (default)</li></ul></td></tr><tr><td>"guests_polling_rate"</td><td>How often to poll for added or removed guests (in seconds)</td><td>Positive integer (min: 3, max: 900, default: 15)</td></tr><tr><td>"tasks_polling_rate"</td><td>How long to wait before polling for task completion (in seconds)</td><td>Positive integer (min: 1, max: 60, default: 3)</td></tr><tr><td>"tasks_polling_retries"</td><td>How many times to poll for task completion</td><td>Positive integer (min: 0, max: 180, default: 20)</td></tr><tr><td>"template_method"</td><td>Level of template support</td><td><p>String</p><ul><li>"none" No template support (default)</li><li>"basic" Supports full or link clones</li><li>"versioning" Supports template versioning</li></ul></td></tr><tr><td>"can_link_clones"</td><td>Supports link clones</td><td><p>Boolean</p><ul><li>true can create link clones</li><li>false otherwise (default)</li></ul></td></tr></tbody></table>

### Template images

Many cloud platforms do not support VM snapshots in the same way that traditional hypervisors do. Instead, they rely on machine images (or templates) to create new instances. To support these environments, the snapshot-related methods in the Custom Provider Framework (CPF) can be implemented using images as the underlying construct.

1. **Without Template Versioning (Full Clones)**<br>

   If template versioning is not required, a simplified mapping can be used:

   * **Convert VM to Template**
     * Create a new image from the VM.
     * Persist the template state by tagging the VM (e.g., storing the image ID).
   * **Convert Template to VM**
     * Remove the template tag.
     * Optionally delete the associated image.
   * **Clone VM**
     * Create a new VM instance from the stored image.
2. **With Template Versioning**<br>

   When template versioning is required, images can be used to represent snapshot states.

   * **Key Concepts**
     * Each “snapshot” is represented by a separate image.
     * The template VM maintains metadata linking snapshot names to image IDs.
     * Example:
       * `RAS_TEMPLATE_VERSION_1` → `image:id:42`
   * **Entering Maintenance Mode**
     * Create a **temporary working VM** from the selected image (snapshot/version).
     * This VM acts as the editable instance of the template.
     * The temporary VM:
       * **must not appear** in guests/list.
       * must be managed internally by the provider.
     * All calls targeting the template VM (guests/get, guests/control) must be **redirected** to this temporary VM.
   * **Exiting Maintenance Mode**

     * Create a new image from the temporary VM (new version).
     * Update the template metadata (tags) to reference the new image.
     * Delete the temporary VM.

     <div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p><strong>Attention</strong>:</p><ul><li>The template VM itself acts as a <strong>logical object</strong>, not necessarily a runnable instance.</li><li><p>The provider is responsible for:</p><ul><li>maintaining the mapping between template IDs and images.</li><li>redirecting operations during maintenance mode.</li></ul></li><li>This abstraction allows cloud platforms to fully support CPF template workflows despite lacking native snapshot capabilities.</li></ul></div>


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.parallels.com/landing/ras-cpf-integration-guide/custom-provider-framework/capabilities.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
