> For the complete documentation index, see [llms.txt](https://docs.infraglide.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.infraglide.com/visual-canvas-and-pipeline-designer/container-nodes.md).

# Container Nodes & Resource Grouping

A **container node** is a structural canvas element that visually encloses child resources and participates in nesting / inheritance rules. Resource nodes represent provisionable cloud components.

***

### Overview

### ![alt text](/files/BHei8cXGZ7mf6eJN18DJ)

### Node Types on the Canvas

| Node Category       | Description                                                               |
| ------------------- | ------------------------------------------------------------------------- |
| **Resource Nodes**  | Ordinary cloud resources (VMs, buckets, databases, networking components) |
| **Container Nodes** | Structural boundaries (VPC, Subnet, Region, Security Tiers)               |

Logical grouping is done with provider container types (and related hierarchy rules).

***

### Common Container Canvas Types

* **Generic / layout:** Region, Zone, Group containers
* **AWS:** VPC, Subnet, Region, Availability Zone, Security Tier, Auto Scaling Group
* **GCP:** VPC Network, Subnet, Region, Zone
* **Azure:** Virtual Network (VNet), Subnet, Container Group

Container items in the Component Library show a **Container** badge with a dashed border.

***

### How Containers Work

1. When you drop or move a node, the designer computes which container's bounds contain the child's **center point**.
2. It picks the **innermost valid** parent according to container hierarchy and invalid-nesting rules.
3. Parent linkage is stored on the node as parent relationship and nesting level metadata.
4. Moving a container moves its descendants with it.
5. Containers are **resizable** — dimensions persist on save.

#### Collapsed Containers

Containers can be **collapsed** to save canvas space:

![alt text](/files/3DzqA7blxWtCcAxZuOFT)

* When collapsed, the container renders at a fixed compact height (\~96 px), showing only the header/label.
* Child nodes inside a collapsed container are **hidden** (not deleted) — they reappear when you expand.
* The pre-collapse dimensions are saved so expanding restores the exact original size.
* Spatial hierarchy (parent/child relationships) is preserved while collapsed — children retain their `parentId` even when hidden.

To collapse or expand a container, use the **collapse control** in the container's chrome/header area.

***

### Why Containers Matter

Placing a resource inside the right container:

* Keeps the topology readable (network tiers, regions, zones).
* Drives **spatial / location inheritance** (region, zone, subnet, VPC, and similar).
* Complements connection-based inheritance for fields such as network IDs.

See [Inheritance & Dynamic Grouping](/visual-canvas-and-pipeline-designer/dynamic-inheritance.md) for field-level behavior and the **Inherited** badge.

***

### Node Action Bar

Hover a node to open the **action bar** (appears directly above or beside the node):

![alt text](/files/MO6DD8sOFnsIQOEdzjEd)

| Action            | Description                                                                       |
| ----------------- | --------------------------------------------------------------------------------- |
| **Configuration** | Open the properties modal to edit resource config                                 |
| **Delete**        | Remove from canvas (and from saved graph on next save)                            |
| **Overflow (…)**  | Additional actions: **Duplicate**, force-replace marks (non-containers), and more |

#### Multi-Select Actions

When multiple nodes are selected, a floating bar appears with:

* Selection count
* **Extract module** — group selected resources into a module
* **Delete selected** — remove all selected nodes

***

### Node Actions Dropdown

In addition to the action bar, some nodes show an **overflow dropdown menu** (⋯ icon) for less-common actions. Click the overflow icon on the action bar to open it. Available options depend on the node type and pipeline state.

![alt text](/files/nws8GkQnBfh5vHGppxCf)

#### Duplicate Node

![alt text](/files/EQ9kXtzsMcSIsQ470cBV)

The **Duplicate** action clones a canvas node (or an entire container with all its nested children) and places the copy offset to the right of the original.

![alt text](/files/RvPpj5GIAlKt7izPLNDx)

* **Resource nodes:** Duplicates a single resource with all its configuration values copied.
* **Container nodes:** Duplicates the container **and all nested child resources** inside it, preserving the full hierarchy.
* The duplicated node is automatically selected after creation.
* A **"Duplicated successfully"** toast confirms the action (e.g. "Container and 3 nested resources duplicated.").
* After duplicating, open **Configuration** on the copy to review and adjust any fields that should differ from the original.

***

### See also

* [Component Library](/visual-canvas-and-pipeline-designer/component-library.md)
* [Inheritance & Dynamic Grouping](/visual-canvas-and-pipeline-designer/dynamic-inheritance.md)
* [Connectors & Dependency Mapping](/visual-canvas-and-pipeline-designer/connectors.md)


---

# 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, and the optional `goal` query parameter:

```
GET https://docs.infraglide.com/visual-canvas-and-pipeline-designer/container-nodes.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
