Symptoms:
VMware Aria Automation is failing to deploy servers to storage profiles that are not selected as the preferred storage profile.
VMware Aria Automation is not able to failover between the created storage profiles.
Deployment error: Error Message: No placement exists that satisfies all of the request requirements. See 'Request Details' for more information. Original Task Error: 'Allocation Filter error: The Storage Requirements for hosts selection are not satisfied.'
Cloud zones or Cloud Account tags are not inherited by the storage objects as it is explained in the doc Using Capability tags in Cloud Assembly
On lower versions than Aria Automation 8.10 the storage profile inherited tags from compute objects, however, this was not intended and it was corrected on 8.10
Add storage constraint tags in the YAML to all the storage objects, even when there is an explicit link between the elements of the deployment.
Constraint tags in a Cloud.vSphere.Machine element.
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: 'compute:production' #compute_tags#
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
storage:
constraints:
- tag: 'storage:gold'
Constraint tags in a Cloud.vSphere.Disk element
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:gold'
Full examples are in the workaround section.
It is required to create a logic placement based on the OS of the Servers Linux and Windows. In vCenter VC1 the following configuration is present:
Linux Compute Cluster connected to a Linux Datastore Cluster.
Windows Compute Cluster connected to a Windows Datastore Cluster.
Linux Compute Cluster is NOT connected to a Windows Datastore Cluster.
Windows Compute Cluster is NOT connected to a Linux Datastore Cluster.
In VMware Aria Automation, there are no Compute Capability Tags on the Cloud Account VC1.
Cloud Account Name | Tags |
VC1 |
There are two cloud zones with the following tags.
Cloud Zone | Tags |
Windows Cluster | os:windows |
Linux Cluster | os:linux |
There are two Storage Profiles, with the following tags. As the default Storage Profile Windows is selected.
Storage Profile | Tags | Default Storage |
VC1-Windows | os: windows | - |
VC1-Linux | os:linux | Yes |
The capabilities tags are defined in the YAML
Linux Cloud Template: One Server with two external disks.
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: 'os:linux'
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Windows Cloud Template: One Server with two external disks.
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: 'os:windows'
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Having this configuration the following are the expected results:
1. The User requests a Linux VM it will not fail because:
VMware Aria Automation will place the VM to the respective Linux cluster based on tags based on the constraint tags specified in the YAML for the Cloud.vSphere.Machine.
Since there are no constraints tag in the YAML under properties for Cloud.vSphere.Disk VMware Aria Automation will use the preferred/default storage, in this case is Linux therefore the deployment will not fail.
2. The User requests a Windows VM it will fail because:
VMware Aria Automation will place the VM to the respective Windows cluster based on tags based on the constraint tags specified in the YAML for the Cloud.vSphere.Machine.
Since there are no constraints tag in the YAML under properties for Cloud.vSphere.Disk VMware Aria Automation will use the preferred/default storage, in this case, is Linux therefore the deployment will fail, since the Linux datastore is not connected to the Windows cluster.
As a best practice use different tags for the different resources (network, compute, and storage) as it is explained in our docs Creating a Tagging Strategy. Therefore, in this example tags are updated considering:
Storage profile: storage:linux storage:windows
Cloud zone: cluster:linux cluster windows:
Storage Profile | Tags | Default Storage |
VC1-Windows | storage: windows | - |
VC1-Linux | storage:linux | Yes |
Cloud Zone | Tags |
Windows Cluster | cluster:windows |
Linux Cluster | cluster:linux |
As explained in this article the Storage Tags are not inherited, therefore, it is required to add them as storage constraints.
Linux Cloud Template: One Server with two external disks.
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: 'cluster:linux'
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
storage:
constraints:
- tag: 'storage:linux'
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:linux'
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:linux'
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: 'cluster:windows'
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
storage:
constraints:
- tag: 'storage:windows'
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:windows'
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:windows'
After adding these Storage constraints tags, deployments will work for Linux and Windows.
In this example. a Cluster Production is connected to three different datastores A, B, C. The goal is to be able to use any of the datastores, if for example datastore A is unhealthy VMware Aria Automation should be able to use B or C.
The cloud zone or cluster has the following tags.
Cloud Zone | Tags |
Production | env:production |
As Storage Profiles are created with the following tags:
Storage Profile | Tags | Default Storage |
---|---|---|
Storage Profile A | env:production | Yes |
Storage Profile B | env:production | - |
Storage Profile C | env:production | - |
The YAML is the following:
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: env:production #compute_tags#
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
In this case when a user requests the deployment:
Since the tags from the compute objects will not propagate to storage objects, we will need to add tags to the storage profile and use add soft tags to the Cloud.vSphere.Disks in the constraint tags of the YAML.
As a best practice use different tags for the different resources (network, compute, and storage) as it is explained in our docs Creating a Tagging Strategy. Therefore, in this example, tags are updated considering:
Storage profiles: storage:A storage:B storage:C
Cloud zone: cluster:production
Cloud Zone | Tags |
Production | cluster:production |
Storage Profile | Tags | Default Storage |
---|---|---|
Storage Profile A | storage:A | Yes |
Storage Profile B | storage:B | - |
Storage Profile C | storage:C | - |
The YAML, we added the constraints tags to the Cloud.vSphere.Disk objects because compute tags are not inhereted by storage objects.
formatVersion: 1
inputs: {}
resources:
Cloud_vSphere_Machine_1:
type: Cloud.vSphere.Machine
properties:
image: Ubuntu-16_04
cpuCount: 1
totalMemoryMB: 1024
constraints:
- tag: cluster:production #compute_tags#
attachedDisks:
- source: ${resource.Cloud_vSphere_Disk_1.id}
- source: ${resource.Cloud_vSphere_Disk_2.id}
Cloud_vSphere_Disk_2:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
Cloud_vSphere_Disk_1:
type: Cloud.vSphere.Disk
properties:
capacityGb: 1
constraints:
- tag: 'storage:A:soft'
- tag: 'storage:B:soft'
- tag: 'storage:C:soft'
Following the upgrade to version 8.18, deployment of virtual machines has encountered issues in certain cases. The error message displayed is:
"No placement exists that satisfies all of the request requirements. Original Task Error: 'Allocation filter error: The storage requirements for host selection are not satisfied.'"
Action Required:
Please verify that Storage DRS is enabled on the datastore clusters where the VMs are being deployed. This configuration is necessary to ensure that the storage requirements are met and to resolve the placement issues.