This is an automated email from the ASF dual-hosted git repository.

nvazquez pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-documentation.git


The following commit(s) were added to refs/heads/main by this push:
     new 3f54e7bb feature: instance boot group and readiness (#677)
3f54e7bb is described below

commit 3f54e7bb36e88e200e90e0d90b00f18a31de7130
Author: Abhishek Kumar <[email protected]>
AuthorDate: Thu Oct 8 22:14:08 2026 +0530

    feature: instance boot group and readiness (#677)
    
    * feature: instance boot group and readiness
    
    Related https://github.com/apache/cloudstack/pull/13907
    
    Signed-off-by: Abhishek Kumar <[email protected]>
    
    * address comments and changes
    
    Signed-off-by: Abhishek Kumar <[email protected]>
    
    * add screens
    
    Signed-off-by: Abhishek Kumar <[email protected]>
    
    * more comment
    
    Signed-off-by: Abhishek Kumar <[email protected]>
    
    ---------
    
    Signed-off-by: Abhishek Kumar <[email protected]>
---
 source/_static/images/instance_boot_group_add.png  | Bin 0 -> 100429 bytes
 .../images/instance_boot_group_member_add.png      | Bin 0 -> 18270 bytes
 .../instance_boot_group_member_readiness_rules.png | Bin 0 -> 88271 bytes
 .../_static/images/instance_boot_group_members.png | Bin 0 -> 157698 bytes
 source/_static/images/instance_boot_groups.png     | Bin 0 -> 119052 bytes
 source/adminguide/virtual_machines.rst             |   6 +
 .../virtual_machines/instance_boot_groups.rst      | 362 +++++++++++++++++++++
 7 files changed, 368 insertions(+)

diff --git a/source/_static/images/instance_boot_group_add.png 
b/source/_static/images/instance_boot_group_add.png
new file mode 100644
index 00000000..bddf6f9d
Binary files /dev/null and b/source/_static/images/instance_boot_group_add.png 
differ
diff --git a/source/_static/images/instance_boot_group_member_add.png 
b/source/_static/images/instance_boot_group_member_add.png
new file mode 100644
index 00000000..ee7fdf84
Binary files /dev/null and 
b/source/_static/images/instance_boot_group_member_add.png differ
diff --git 
a/source/_static/images/instance_boot_group_member_readiness_rules.png 
b/source/_static/images/instance_boot_group_member_readiness_rules.png
new file mode 100644
index 00000000..93a4650d
Binary files /dev/null and 
b/source/_static/images/instance_boot_group_member_readiness_rules.png differ
diff --git a/source/_static/images/instance_boot_group_members.png 
b/source/_static/images/instance_boot_group_members.png
new file mode 100644
index 00000000..e95cabd3
Binary files /dev/null and 
b/source/_static/images/instance_boot_group_members.png differ
diff --git a/source/_static/images/instance_boot_groups.png 
b/source/_static/images/instance_boot_groups.png
new file mode 100644
index 00000000..ea966457
Binary files /dev/null and b/source/_static/images/instance_boot_groups.png 
differ
diff --git a/source/adminguide/virtual_machines.rst 
b/source/adminguide/virtual_machines.rst
index 89d0ffef..1b47d1bc 100644
--- a/source/adminguide/virtual_machines.rst
+++ b/source/adminguide/virtual_machines.rst
@@ -1235,6 +1235,12 @@ TPM version for KVM. There are two options:
 |vm-settings-virtual-tpm-enabled-vmware.png|
 Enable or disable vTPM for VMware.
 
+Instance Boot Groups
+=====================
+
+.. include:: virtual_machines/instance_boot_groups.rst
+
+
 Instance Snapshots
 ==================
 
diff --git a/source/adminguide/virtual_machines/instance_boot_groups.rst 
b/source/adminguide/virtual_machines/instance_boot_groups.rst
new file mode 100644
index 00000000..276024cd
--- /dev/null
+++ b/source/adminguide/virtual_machines/instance_boot_groups.rst
@@ -0,0 +1,362 @@
+.. Licensed to the Apache Software Foundation (ASF) under one
+   or more contributor license agreements.  See the NOTICE file
+   distributed with this work for additional information#
+   regarding copyright ownership.  The ASF licenses this file
+   to you under the Apache License, Version 2.0 (the
+   "License"); you may not use this file except in compliance
+   with the License.  You may obtain a copy of the License at
+   http://www.apache.org/licenses/LICENSE-2.0
+   Unless required by applicable law or agreed to in writing,
+   software distributed under the License is distributed on an
+   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+   KIND, either express or implied.  See the License for the
+   specific language governing permissions and limitations
+   under the License.
+
+An **Instance Boot Group** lets a User or Administrator group a set of 
Instances
+and Instance Groups together so that they can be started, stopped, and
+rebooted as a single, ordered unit. This is useful for multi-tier
+applications where some Instances depend on others being up and reachable
+before they should boot, for example a database tier that must be running
+before an application tier starts, which in turn must be running before a
+web tier starts.
+
+An Instance Boot Group is owned by an account, just like an Instance, and is
+managed from **Compute > Instance Boot Groups** in the CloudStack UI.
+
+   |instance_boot_groups.png|
+
+.. note:: An Instance Boot Group is a different concept from an Instance
+   Group (**Compute > Instance Groups**), which is a simple, unordered label
+   used to organize Instances. An Instance Group can itself be added as a
+   member of an Instance Boot Group.
+
+Members and Boot Order
+~~~~~~~~~~~~~~~~~~~~~~~
+
+A **member** of an Instance Boot Group is either a single Instance or an
+existing Instance Group. Each member is assigned a **Boot Order**, a
+non-negative integer.
+
+- All members that share the same Boot Order value form a **tier**, and boot
+  (or shut down) together, concurrently.
+- Tiers are processed strictly in order: when starting a group, tier 0 is
+  processed before tier 1, tier 1 before tier 2, and so on. When stopping a
+  group, tiers are processed in the reverse order.
+- An Instance or Instance Group can be a member of only one Instance Boot
+  Group at a time.
+- An Instance that is part of a VNF appliance, or that already belongs to an
+  AutoScale VM group, cannot be added to an Instance Boot Group.
+- The maximum number of members allowed in a single Instance Boot Group is
+  controlled by the domain-scoped configuration
+  ``instance.boot.group.max.members`` (default: 10).
+
+Readiness Rules
+~~~~~~~~~~~~~~~~
+
+By default, CloudStack does not define any readiness rules for the members of
+an Instance Boot Group, so it considers a member of the group "ready"
+as soon as its Instance (or, for an Instance Group member, all of its
+Instances) reaches the Running state. For many applications this is not
+enough. For example, a database Instance may be Running but not yet
+accepting connections.
+
+A **Readiness Rule** lets you define what "ready" really means for a member,
+beyond the Instance's power state. When an Instance Boot Group is started,
+CloudStack waits for a tier's readiness rules to report success before
+moving on to start the next tier.
+
+Readiness Rules can be attached directly to an Instance member or to an
+Instance Group member. A rule attached to an Instance Group is automatically
+**inherited** by every Instance currently in that group, and is evaluated
+individually against each of them.
+
+The following Readiness Rule types are supported:
+
+.. cssclass:: table-striped table-bordered table-hover
+
+======================= ============================= 
==========================================================================================
+Rule Type               Applies to                    Description
+======================= ============================= 
==========================================================================================
+Ping                     Instance, Instance Group     Checks that the Instance 
responds to an ICMP ping, issued from the Virtual Router on the
+                                                      Instance's default 
network. Requires a running Virtual Router on that network.
+PortCheck                Instance, Instance Group     Checks that a TCP port 
on the Instance can be connected to, from the Virtual Router on the
+                                                      Instance's default 
network. Requires the ``port`` detail (1-65535) and, optionally, the
+                                                      ``protocol`` detail 
(only ``tcp`` is supported).
+GuestAgentLiveness       Instance, Instance Group     Checks that the QEMU 
guest agent inside the Instance responds to a liveness ping.
+                                                      Supported on **KVM 
only**. Requires installing the ``qemu-guest-agent`` package on the
+                                                      guest Instances.
+MemberQuorum             Instance Group only          Considers the group 
ready once a threshold of its member Instances are ready, instead of
+                                                      requiring all of them. 
Requires the ``thresholdtype`` detail (``COUNT`` or ``PERCENTAGE``)
+                                                      and the 
``thresholdvalue`` detail.
+======================= ============================= 
==========================================================================================
+
+.. note:: ``Ping``, ``GuestAgentLiveness``, and ``MemberQuorum`` are singleton
+   rules, i.e., only one of each can be attached to a given member. Multiple
+   ``PortCheck`` rules can be attached to the same member, one per port.
+
+.. note:: ``Ping`` and ``PortCheck`` rules require the target Instance to
+   have a default network with a Virtual Router (they cannot be used on an
+   L2 network).
+
+If a member has no Readiness Rules of its own and inherits none from an
+owning Instance Group, its readiness is simply its Instance's power state
+(Running or not).
+
+Configuring Instance Boot Group Behaviour
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following global configuration parameters control how readiness is
+checked while an Instance Boot Group is starting. All of them, except the
+poll interval and the concurrency setting, can be overridden per Instance
+Boot Group when it is created or updated.
+
+.. cssclass:: table-striped table-bordered table-hover
+
+========================================================= 
==========================================================================================
+Configuration                                             Description
+========================================================= 
==========================================================================================
+instance.boot.group.readiness.timeout.seconds             Timeout, in seconds, 
for a single readiness check attempt. **Default: 300**
+                                                          (overridable per 
Instance Boot Group)
+instance.boot.group.readiness.max.retry.attempts          Maximum number of 
readiness check attempts for a member before the tier, and the
+                                                          Instance Boot Group 
start, is considered to have failed. **Default: 5**
+                                                          (overridable per 
Instance Boot Group)
+instance.boot.group.readiness.initial.delay.seconds       Delay, in seconds, 
after an Instance is started before its first readiness check
+                                                          attempt is made. 
**Default: 30** (overridable per Instance Boot Group)
+instance.boot.group.readiness.reboot.on.retry             Whether a member 
Instance should be rebooted before each new readiness check retry,
+                                                          instead of simply 
being re-checked. **Default: false** (overridable per Instance Boot
+                                                          Group)
+instance.boot.group.readiness.poll.interval.seconds       Interval, in 
seconds, between readiness check attempts. **Default: 10** (global only)
+instance.boot.group.readiness.check.concurrency           Maximum number of 
members within a tier whose readiness is checked concurrently.
+                                                          **Default: 10** 
(global only)
+instance.boot.group.max.members                           Maximum number of 
members allowed in a single Instance Boot Group. This is a
+                                                          domain-scoped 
setting. **Default: 10**
+========================================================= 
==========================================================================================
+
+Creating an Instance Boot Group
+---------------------------------
+
+#. Log in to the CloudStack UI.
+#. In the left navigation bar, click **Compute**, then **Instance Boot 
Groups**.
+#. Click **Add Instance Boot Group**.
+#. Provide a name and, optionally, a description.
+#. Optionally, expand the readiness settings to override the default
+   readiness timeout, maximum retry attempts, initial delay, or
+   reboot-on-retry behaviour for this Instance Boot Group only.
+#. Click **OK**.
+
+   |instance_boot_group_add.png|
+
+Using the API:
+
+.. code:: bash
+
+   cmk create instancebootgroup name=web-app-stack description="DB, App and 
Web tiers"
+
+Adding and Managing Members
+------------------------------
+
+Once an Instance Boot Group has been created, Instances or Instance Groups
+can be added to it as members, each with its own Boot Order.
+
+   |instance_boot_group_members.png|
+
+Adding a Member
+~~~~~~~~~~~~~~~~
+
+#. Open the Instance Boot Group and go to the **Members** tab.
+#. Click **Add Member**.
+#. Choose whether the member is an Instance or an Instance Group, then
+   select it from the list.
+#. Enter the Boot Order for the new member.
+#. Click **OK**.
+
+   |instance_boot_group_member_add.png|
+
+Using the API:
+
+.. code:: bash
+
+   # Add an Instance as a member of tier 0 (starts first)
+   cmk add membertoinstancebootgroup id=<boot-group-id> 
virtualmachineid=<vm-id> order=0
+
+   # Add an Instance Group as a member of tier 1 (starts after tier 0)
+   cmk add membertoinstancebootgroup id=<boot-group-id> 
instancegroupid=<instance-group-id> order=1
+
+Changing a Member's Boot Order
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+From the **Members** tab, use the **Boot Order** action on a member row to
+move it to a different tier. Any other members between the old and new
+position are automatically shifted to keep the ordering consistent.
+
+Using the API:
+
+.. code:: bash
+
+   cmk update instancebootgroupmember id=<member-id> order=2
+
+Removing a Member
+~~~~~~~~~~~~~~~~~~
+
+Removing a member from an Instance Boot Group only removes it from the
+group (and deletes any Readiness Rules attached to it); the Instance or
+Instance Group itself, and its running state, are not affected.
+
+.. code:: bash
+
+   cmk remove instancebootgroupmember id=<member-id>
+
+Listing Members and Their Status
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The **Members** tab lists all members of an Instance Boot Group sorted by
+Boot Order, along with a readiness status badge (Ready, NotReady, Error, or
+Unknown) for each. An Instance Group member row can be expanded to see the
+readiness of each Instance inside it.
+
+.. code:: bash
+
+   cmk list instancebootgroupmembers bootgroupid=<boot-group-id> 
details=readiness,children
+
+.. note:: Computing readiness details is not free, so it is only returned
+   when explicitly requested (``details=readiness``). Add
+   ``ignoreinstancestate=true`` to see the last cached rule result even
+   while the Instance is stopped; by default, a stopped Instance is always
+   reported NotReady regardless of the cached result.
+
+Configuring Readiness Rules for a Member
+-------------------------------------------
+
+#. From the **Members** tab, use the **Manage Readiness Rules** action on
+   the member you want to configure.
+#. Click **Add Rule**, choose a Rule Type, and fill in the fields relevant
+   to that type (for example, the port and protocol for a ``PortCheck``
+   rule, or the threshold type and value for a ``MemberQuorum`` rule on an
+   Instance Group).
+#. Click **OK**.
+
+Rules inherited from an owning Instance Group are shown read-only, tagged
+**Inherited**; they must be removed from the Instance Group member instead.
+
+   |instance_boot_group_member_readiness_rules.png|
+
+.. note:: When adding a ``GuestAgentLiveness`` rule, make sure the QEMU
+   guest agent(``qemu-guest-agent`` package) is installed, running, and
+   responsive inside the guest Instance, the rule can only report Ready
+   once the agent answers.
+
+Using the API:
+
+.. code:: bash
+
+   # A TCP port check on an Instance
+   cmk create instancebootgroupreadinessrule bootgroupid=<boot-group-id> \
+       virtualmachineid=<vm-id> ruletype=PortCheck \
+       details[0].port=1433 details[0].protocol=tcp
+
+   # A member quorum rule on an Instance Group (ready once 75% of its 
Instances are ready)
+   cmk create instancebootgroupreadinessrule bootgroupid=<boot-group-id> \
+       instancegroupid=<instance-group-id> ruletype=MemberQuorum \
+       details[0].thresholdtype=PERCENTAGE details[0].thresholdvalue=75
+
+   cmk list instancebootgroupreadinessrules bootgroupid=<boot-group-id>
+
+   cmk update instancebootgroupreadinessrule id=<rule-id> enabled=false
+
+   cmk delete instancebootgroupreadinessrule id=<rule-id>
+
+.. note:: The rule type of an existing Readiness Rule cannot be changed;
+   only its name, enabled state, and details can be updated. Delete and
+   re-create the rule to change its type.
+
+Starting, Stopping, and Rebooting an Instance Boot Group
+-------------------------------------------------------------
+
+Instance Boot Groups are started, stopped, and rebooted as a whole from the
+**Instance Boot Groups** list or detail view, or via the API. These are
+asynchronous operations.
+
+- **Start**: tiers are started in ascending Boot Order. All members of a
+  tier are started concurrently, and CloudStack waits for the tier to
+  become ready based on its members' Readiness Rules before starting
+  the next tier. If a member does not become ready within the configured
+  number of retry attempts, or fails to start, the whole start operation is
+  halted. Instances that were already started before the failure are left
+  running; they are not automatically stopped again.
+- **Stop**: tiers are stopped in descending Boot Order, the reverse of
+  start. Readiness Rules are not checked while stopping, and a failure to
+  stop one member does not prevent CloudStack from continuing to stop the
+  remaining tiers.
+- **Reboot**: equivalent to a stop followed by a start, i.e. the whole
+  group is stopped in descending order and then started again in ascending,
+  readiness-gated order.
+
+Using the API:
+
+.. code:: bash
+
+   cmk start instancebootgroup id=<boot-group-id>
+
+   cmk stop instancebootgroup id=<boot-group-id> forced=true
+
+   cmk reboot instancebootgroup id=<boot-group-id>
+
+Deleting an Instance Boot Group
+------------------------------------
+
+Deleting an Instance Boot Group removes its members and any Readiness
+Rules attached to them; the Instances and Instance Groups themselves are
+left untouched and continue running or stopped as they were.
+
+.. code:: bash
+
+   cmk delete instancebootgroup id=<boot-group-id>
+
+Instance Boot Group Events
+---------------------------------
+
+The following events are logged for auditing and monitoring Instance Boot
+Group activity:
+
+.. cssclass:: table-striped table-bordered table-hover
+
+================================================= 
======================================================
+Event Type                                         Description
+================================================= 
======================================================
+INSTANCE.BOOT.GROUP.CREATE                         An Instance Boot Group was 
created
+INSTANCE.BOOT.GROUP.UPDATE                         An Instance Boot Group was 
updated
+INSTANCE.BOOT.GROUP.DELETE                         An Instance Boot Group was 
deleted
+INSTANCE.BOOT.GROUP.START                          An Instance Boot Group was 
started
+INSTANCE.BOOT.GROUP.STOP                           An Instance Boot Group was 
stopped
+INSTANCE.BOOT.GROUP.REBOOT                         An Instance Boot Group was 
rebooted
+INSTANCE.BOOT.GROUP.MEMBER.ADD                     A member was added to an 
Instance Boot Group
+INSTANCE.BOOT.GROUP.MEMBER.REMOVE                  A member was removed from 
an Instance Boot Group
+INSTANCE.BOOT.GROUP.READINESS.RULE.CREATE          A Readiness Rule was created
+INSTANCE.BOOT.GROUP.READINESS.RULE.UPDATE          A Readiness Rule was updated
+INSTANCE.BOOT.GROUP.READINESS.RULE.DELETE          A Readiness Rule was deleted
+================================================= 
======================================================
+
+Limitations
+-----------
+
+#. An Instance or Instance Group can belong to at most one Instance Boot
+   Group at a time.
+#. Instances that are part of a VNF appliance, or already belong to an
+   AutoScale VM group, cannot be added to an Instance Boot Group.
+#. The ``GuestAgentLiveness`` Readiness Rule requires the QEMU guest agent
+   and is supported on KVM Instances only. It requires installing the
+   ``qemu-guest-agent`` package on the guest Instances.
+#. ``Ping`` and ``PortCheck`` Readiness Rules require a running Virtual
+   Router on the Instance's default network, and cannot be used on Instances
+   connected only to an L2 network.
+#. If starting an Instance Boot Group is halted because a tier fails to
+   become ready, any Instances already started in earlier tiers are left
+   running. The operation is not automatically rolled back.
+
+
+.. |instance_boot_groups.png| image:: /_static/images/instance_boot_groups.png
+.. |instance_boot_group_add.png| image:: 
/_static/images/instance_boot_group_add.png
+.. |instance_boot_group_members.png| image:: 
/_static/images/instance_boot_group_members.png
+.. |instance_boot_group_member_add.png| image:: 
/_static/images/instance_boot_group_member_add.png
+.. |instance_boot_group_member_readiness_rules.png| image:: 
/_static/images/instance_boot_group_member_readiness_rules.png

Reply via email to