---
title: Control virtual machine states
---

# Control virtual machine states {#virt-controlling-vm-states}

You can use `virtctl` to manage virtual machine states and perform other actions from the CLI. For example, you can use `virtctl` to force stop a VM or expose a port.

You can stop, start, restart, reset, pause, and unpause virtual machines from the web console.

## Configuring RBAC permissions for managing VM states by using the web console {#virt-configure-rbac-console-subresources-api_virt-controlling-vm-states}

To allow users to manage virtual machine (VM) states by using the OpenShift Container Platform web console, you must create an RBAC cluster role and cluster role binding. The cluster role uses the `subresources.kubevirt.io` API to define which resources can be controlled by certain users or groups.

**Prerequisites**

- You have cluster administrator access to an OpenShift Container Platform cluster where OpenShift Virtualization is installed.
- You have installed the OpenShift CLI (`oc`).

**Procedure**

1. Create a `ClusterRole` object that allows the target user or group to manage VM states:

   ```yaml
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRole
   metadata:
     name: vm-manager-access
   rules:
     - apiGroups:
         - subresources.kubevirt.io
       resources:
         - virtualmachines/start
         - virtualmachines/stop
       verbs:
         - update
   # ...
   ```
2. Run the following command to apply the cluster role:

   ```terminal
   $ oc apply -f <filename>.yaml
   ```
3. Confirm that the cluster role was created by running the following command and observing the output:

   ```terminal
   $ oc get clusterrole <name>
   ```

   Example output:

   ```terminal
   NAME                AGE
   vm-manager-access   15s
   ```
4. Inspect the details of the cluster role, and ensure the intended rules for `subresources.kubevirt.io` are present, specifically the `virtualmachines/start` and `virtualmachines/stop` subresources.

   Run the following command and observe the output:

   ```terminal
   $ oc describe clusterrole <name>
   ```

   Example output:

   ```terminal
   Name:         vm-manager-access
   Labels:       <none>
   Annotations:  <none>
   PolicyRule:
     Resources  Non-Resource URLs  Resource Names  Verbs
     ---------  -----------------  --------------  -----
     virtualmachines/start, virtualmachines/stop with subresources.kubevirt.io group  []  []  [update]
   ```
5. Create a `ClusterRoleBinding` object to bind the cluster role you have created to the target user or group:

   ```yaml
   apiVersion: rbac.authorization.k8s.io/v1
   kind: ClusterRoleBinding
   metadata:
     name: vm-manager-access-binding
   subjects:
     - kind: User
       name: test-user
       apiGroup: rbac.authorization.k8s.io
   roleRef:
     kind: ClusterRole
     name: vm-manager-access
     apiGroup: rbac.authorization.k8s.io
   ```
6. Run the following command to apply the cluster role binding:

   ```terminal
   $ oc apply -f <filename>.yaml
   ```
7. Confirm that the cluster role binding was created by running the following command and observing the output:

   ```terminal
   $ oc get clusterrolebinding <name>
   ```

   Example output:

   ```terminal
   NAME                        AGE
   vm-manager-access-binding   15s
   ```

**Verification**

1. Check if the user can start a VM by running the following command:

   ```terminal
   $ oc auth can-i update virtualmachines/start --namespace=<namespace> --as=<user_name> --subresource=subresources.kubevirt.io
   ```

   Example output:

   ```terminal
   yes
   ```
2. Check if the user can stop a VM by running the following command:

   ```terminal
   $ oc auth can-i update virtualmachines/stop --namespace=<namespace> --as=<user_name> --group=subresources.kubevirt.io
   ```

   Example output:

   ```terminal
   yes
   ```

## Enabling confirmations of virtual machine actions {#virt-enable-vm-action-confirmation-web_virt-controlling-vm-states}

The **Stop**, **Restart**, and **Pause** actions can display confirmation dialogs if confirmation is enabled. By default, confirmation is disabled.

**Procedure**

1. Click **Virtualization** → **Settings** → **Cluster** → **General settings**.
2. Click **VirtualMachine actions confirmation**.
3. Toggle the **VirtualMachine actions confirmation** setting to **On**.

## Starting a virtual machine {#virt-starting-vm-web_virt-controlling-vm-states}

You can start a virtual machine (VM) from the web console.

**Procedure**

1. Click **Virtualization** → **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to start.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Start VirtualMachine**.
   - To start the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Start**.
   - To view comprehensive information about the selected VM before you start it:

     1. Access the **VirtualMachine details** page by clicking the name of the VM.
     2. Click **Actions** → **Control** → **Start**.

        > [!NOTE]
        > When you start VM that is provisioned from a `URL` source for the first time, the VM has a status of **Importing** while OpenShift Virtualization imports the container from the URL endpoint. Depending on the size of the image, this process might take several minutes.

## Stopping a virtual machine {#virt-stopping-vm-web_virt-controlling-vm-states}

You can stop a virtual machine (VM) from the web console.

**Procedure**

1. Click **Virtualization** →  **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to stop.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Stop VirtualMachine**.
     2. If action confirmation is enabled, click **Stop** in the confirmation dialog.
   - To stop the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Stop**.
     3. If action confirmation is enabled, click **Stop** in the confirmation dialog.
   - To view comprehensive information about the selected VM before you stop it:

     1. Access the **VirtualMachine details** page by clicking the name of the VM.
     2. Click **Actions** → **Control** → **Stop**.
     3. If action confirmation is enabled, click **Stop** in the confirmation dialog.

## Restarting a virtual machine {#virt-restarting-vm-web_virt-controlling-vm-states}

You can restart a running virtual machine (VM) from the web console.

> [!IMPORTANT]
> The **Restart** action shuts down the VM and starts a new pod. This action removes all related resources including the `virt-launcher` pod and recreates them.
>
> To avoid errors, do not restart a VM while it has a status of **Importing**.

**Procedure**

1. Click **Virtualization** → **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to restart.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Restart**.
     2. If action confirmation is enabled, click **Restart** in the confirmation dialog.
   - To restart the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Restart**.
     3. If action confirmation is enabled, click **Restart** in the confirmation dialog.
   - To view comprehensive information about the selected VM before you restart it:

     1. Access the **VirtualMachine details** page by clicking the name of the virtual machine.
     2. Click **Actions** → **Restart**.
     3. If action confirmation is enabled, click **Restart** in the confirmation dialog.

## Resetting a virtual machine {#virt-resetting-vm-web_virt-controlling-vm-states}

Unlike the **Restart** action, the **Reset** action preserves the pod in which the virtual machine (VM) is running and just hard resets the same VM inside it. When a VM is unresponsive or failed to boot, you can use the **Reset** action to bring it back immediately.

You can reset a VM from the web console.

**Procedure**

1. Click **Virtualization** → **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to restart.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Reset**.
     2. If action confirmation is enabled, click **Reset** in the confirmation dialog.
   - To reset the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Reset**.
     3. If action confirmation is enabled, click **Reset** in the confirmation dialog.
   - To view comprehensive information about the selected VM before you reset it:

     1. Access the **VirtualMachine details** page by clicking the name of the virtual machine.
     2. Click **Actions** → **Control** → **Reset**.
     3. If action confirmation is enabled, click **Reset** in the confirmation dialog.

## Pausing a virtual machine {#virt-pausing-vm-web_virt-controlling-vm-states}

You can pause a virtual machine (VM) from the web console.

**Procedure**

1. Click **Virtualization** → **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to pause.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Pause VirtualMachine**.
     2. If action confirmation is enabled, click **Pause** in the confirmation dialog.
   - To pause the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Pause**.
     3. If action confirmation is enabled, click **Pause** in the confirmation dialog.
   - To view comprehensive information about the selected VM before you pause it:

     1. Access the **VirtualMachine details** page by clicking the name of the VM.
     2. Click **Actions** → **Control** → **Pause**.
     3. If action confirmation is enabled, click **Pause** in the confirmation dialog.

## Unpausing a virtual machine {#virt-unpausing-vm-web_virt-controlling-vm-states}

You can unpause a paused virtual machine (VM) from the web console.

**Prerequisites**

- At least one of your VMs must have a status of **Paused**.

**Procedure**

1. Click **Virtualization** → **VirtualMachines** from the side menu.
2. In the tree view, select the project that contains the VM that you want to unpause.
3. Navigate to the appropriate menu for your use case:

   - To stay on this page, where you can perform actions on multiple VMs:

     1. Click the Options menu ![](/openshift-docs-markdown/images/kebab.png "Options menu") located at the far right end of the row and click **Control** → **Unpause VirtualMachine**.
   - To unpause the VM from the tree view:

     1. Click the **>** icon next to the project name to open the list of VMs.
     2. Right-click the name of the VM and select **Control** → **Unpause**.
   - To view comprehensive information about the selected VM before you unpause it:

     1. Access the **VirtualMachine details** page by clicking the name of the virtual machine.
     2. Click **Actions** → **Control** → **Unpause**.

## Controlling the state of multiple virtual machines {#virt-controlling-multiple-vms-web_virt-controlling-vm-states}

You can start, stop, restart, pause, and unpause multiple virtual machines (VMs) from the web console.

**Procedure**

1. Navigate to **Virtualization** → **VirtualMachines** in the web console.
2. Optional: Enable the **Show only projects with VirtualMachines** option above the tree view to limit the displayed projects.
3. Select a relevant project from the tree view.
4. Navigate to the appropriate menu for your use case:

   - To change the state of all VMs in the selected project:

     1. Right-click the name of the project in the tree view and select the intended action from the menu.
     2. If action confirmation is enabled, confirm the action in the confirmation dialog.
   - To change the state of specific VMs:

     1. Select a checkbox next to the VMs you want to work with. To select all VMs, click the checkbox in the **VirtualMachines** table header.
     2. Click **Actions** and select the intended action from the menu.
     3. If action confirmation is enabled, confirm the action in the confirmation dialog.

**Additional resources**
{._additional-resources}

- [Using the CLI tools](/openshift-docs-markdown/virt/getting_started/virt-using-the-cli-tools#virt-using-the-cli-tools)
