diff --git a/website/docs/d/storage_policy.html.markdown b/website/docs/d/storage_policy.html.markdown index e4481e566..b04442e26 100644 --- a/website/docs/d/storage_policy.html.markdown +++ b/website/docs/d/storage_policy.html.markdown @@ -8,18 +8,19 @@ description: |- # vsphere\_storage\_policy -The `vsphere_storage_policy` data source can be used to discover the UUID of a -vSphere storage policy. This can then be used with resources or data sources that -require a storage policy. +The `vsphere_storage_policy` data source can be used to discover the UUID of a storage policy. This can then be used with other resources or data sources that use a storage policy. -~> **NOTE:** Storage policy support is unsupported on direct ESXi connections and -requires vCenter 6.0 or higher. +~> **NOTE:** Storage policies are not supported on direct ESXi hosts and requires vCenter Server. ## Example Usage ```hcl -data "vsphere_storage_policy" "policy" { - name = "policy1" +data "vsphere_storage_policy" "prod_platinum_replicated" { + name = "prod_platinum_replicated" +} + +data "vsphere_storage_policy" "dev_silver_nonreplicated" { + name = "dev_silver_nonreplicated" } ``` @@ -31,5 +32,4 @@ The following arguments are supported: ## Attribute Reference -The only exported attribute is `id`, which is the UUID of this storage policy. - +The only exported attribute is `id`, which is the UUID of this storage policy. \ No newline at end of file diff --git a/website/docs/r/vm_storage_policy.html.markdown b/website/docs/r/vm_storage_policy.html.markdown index bc060aa4f..e7b479cce 100644 --- a/website/docs/r/vm_storage_policy.html.markdown +++ b/website/docs/r/vm_storage_policy.html.markdown @@ -4,53 +4,162 @@ layout: "vsphere" page_title: "VMware vSphere: vm_storage_policy" sidebar_current: "docs-vsphere-resource-vm-storage-policy" description: |- - Provides CRUD operations on vm storage policy profiles. These policies help create tag based rules for placement of a - VM on datastores. While placing a VM, compatible datastores can be filtered using these profiles. + Storage policies can select the most appropriate datastore for the virtual machine and enforce the required level of service. --- # vsphere\_vm\_storage\_policy The `vsphere_vm_storage_policy` resource can be used to create and manage storage -policies. Using this storage policy, tag based placement rules can be created to -place a VM on a particular tagged datastore. +policies. Using this resource, tag based placement rules can be created to +place virtual machines on a datastore with matching tags. If storage requirements for the applications on the virtual machine change, you can modify the storage policy that was originally applied to the virtual machine. ## Example Usage -This example creates a storage policy with tag_rule having cat1 as tag_category and -tag1, tag2 as the tags. While creating a VM, this policy can be referenced to place -the VM in any of the compatible datastore tagged with these tags. +The following example creates storage policies with `tag_rules` base on sets of environment, service level, and replication attributes. +In this example, tags are first applied to datastores. ```hcl +data "vsphere_tag_category" "environment" { + name = "environment" +} + +data "vsphere_tag_category" "service_level" { + name = "service_level" +} -data "vsphere_datacenter" "dc" { - name = "DC" +data "vsphere_tag_category" "replication" { + name = "replication" } -data "vsphere_tag_category" "tag_category" { - name = "cat1" +data "vsphere_tag" "production" { + name = "production" + category_id = "data.vsphere_tag_category.environment.id" } -data "vsphere_tag" "tag1" { - name = "tag1" - category_id = "${data.vsphere_tag_category.tag_category.id}" +data "vsphere_tag" "development" { + name = "development" + category_id = "data.vsphere_tag_category.environment.id" } -data "vsphere_tag" "tag2" { - name = "tag2" - category_id = "${data.vsphere_tag_category.tag_category.id}" +data "vsphere_tag" "platinum" { + name = "platinum" + category_id = "data.vsphere_tag_category.service_level.id" } -resource "vsphere_vm_storage_policy" "policy_tag_based_placement" { - name = "policy1" - description = "description" +data "vsphere_tag" "gold" { + name = "platinum" + category_id = "data.vsphere_tag_category.service_level.id" +} +data "vsphere_tag" "silver" { + name = "silver" + category_id = "data.vsphere_tag_category.service_level.id" +} + +data "vsphere_tag" "bronze" { + name = "bronze" + category_id = "data.vsphere_tag_category.service_level.id" +} + +data "vsphere_tag" "replicated" { + name = "replicated" + category_id = "data.vsphere_tag_category.replication.id" +} + +data "vsphere_tag" "non_replicated" { + name = "non_replicated" + category_id = "data.vsphere_tag_category.replication.id" +} + +resource "vsphere_vmfs_datastore" "prod_datastore" { + # ... other configuration ... + tags = [ + "data.vsphere_tag.production.id", + "data.vsphere_tag.platinum.id", + "data.vsphere_tag.replicated.id" + ] + # ... other configuration ... +} + +resource "vsphere_nas_datastore" "dev_datastore" { + # ... other configuration ... + tags = [ + "data.vsphere_tag.development.id", + "data.vsphere_tag.silver.id", + "data.vsphere_tag.non_replicated.id" + ] + # ... other configuration ... +} +``` + +Next, storage policies are created and `tag_rules` are applied. + +```hcl +resource "vsphere_vm_storage_policy" "prod_platinum_replicated" { + name = "prod_platinum_replicated" + description = "prod_platinum_replicated" + + tag_rules { + tag_category = data.vsphere_tag_category.environment.name + tags = [data.vsphere_tag.production.name] + include_datastores_with_tags = true + } tag_rules { - tag_category = data.vsphere_tag_category.tag_category.name - tags = [data.vsphere_tag.tag1.name, data.vsphere_tag.tag2.name] + tag_category = data.vsphere_tag_category.service_level.name + tags = [data.vsphere_tag.platinum.name] include_datastores_with_tags = true } + tag_rules { + tag_category = data.vsphere_tag_category.replication.name + tags = [data.vsphere_tag.replicated.name] + include_datastores_with_tags = true + } +} + +resource "vsphere_vm_storage_policy" "dev_silver_nonreplicated" { + name = "dev_silver_nonreplicated" + description = "dev_silver_nonreplicated" + + tag_rules { + tag_category = data.vsphere_tag_category.environment.name + tags = [data.vsphere_tag.development.name] + include_datastores_with_tags = true + } + tag_rules { + tag_category = data.vsphere_tag_category.service_level.name + tags = [data.vsphere_tag.silver.name] + include_datastores_with_tags = true + } + tag_rules { + tag_category = data.vsphere_tag_category.replication.name + tags = [data.vsphere_tag.non_replicated.name] + include_datastores_with_tags = true + } +} +``` + +Lasttly, when creating a virtual machine resource, a storage policy can be specificed to direct virtual machine placement to a datastore which matches the policy's `tags_rules`. + +```hcl +data "vsphere_storage_policy" "prod_platinum_replicated" { + name = "prod_platinum_replicated" +} + +data "vsphere_storage_policy" "dev_silver_nonreplicated" { + name = "dev_silver_nonreplicated" +} +resource "vsphere_virtual_machine" "prod_vm" { + # ... other configuration ... + storage_policy_id = data.vsphere_storage_policy.storage_policy.prod_platinum_replicated.id + # ... other configuration ... +} + +resource "vsphere_virtual_machine" "dev_vm" { + # ... other configuration ... + storage_policy_id = data.vsphere_storage_policy.storage_policy.dev_silver_nonreplicated.id + # ... other configuration ... } ``` @@ -63,6 +172,4 @@ The following arguments are supported: * `tag_rules` - (Required) List of tag rules. The tag category and tags to be associated to this storage policy. * `tag_category` - (Required) Name of the tag category. * `tags` - (Required) List of Name of tags to select from the given category. - * `include_datastores_with_tags` - (Optional) Whether to include datastores with the given tags or exclude. Default - value is true i.e. include datastores with the given tags. - + * `include_datastores_with_tags` - (Optional) Include datastores with the given tags or exclude. Default `true`. \ No newline at end of file