@pulumi/vsphere 4.16.2 → 4.16.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/computeCluster.d.ts +137 -67
  2. package/computeCluster.js +92 -46
  3. package/computeCluster.js.map +1 -1
  4. package/computeClusterHostGroup.d.ts +45 -25
  5. package/computeClusterHostGroup.js +21 -13
  6. package/computeClusterHostGroup.js.map +1 -1
  7. package/computeClusterVmAffinityRule.d.ts +32 -20
  8. package/computeClusterVmAffinityRule.js +20 -14
  9. package/computeClusterVmAffinityRule.js.map +1 -1
  10. package/computeClusterVmAntiAffinityRule.d.ts +40 -13
  11. package/computeClusterVmAntiAffinityRule.js +28 -7
  12. package/computeClusterVmAntiAffinityRule.js.map +1 -1
  13. package/computeClusterVmDependencyRule.d.ts +32 -24
  14. package/computeClusterVmDependencyRule.js +20 -18
  15. package/computeClusterVmDependencyRule.js.map +1 -1
  16. package/computeClusterVmGroup.d.ts +32 -23
  17. package/computeClusterVmGroup.js +8 -11
  18. package/computeClusterVmGroup.js.map +1 -1
  19. package/computeClusterVmHostRule.d.ts +36 -26
  20. package/computeClusterVmHostRule.js +24 -20
  21. package/computeClusterVmHostRule.js.map +1 -1
  22. package/configurationProfile.d.ts +88 -0
  23. package/configurationProfile.js +88 -0
  24. package/configurationProfile.js.map +1 -1
  25. package/contentLibrary.d.ts +6 -4
  26. package/contentLibrary.js +3 -1
  27. package/contentLibrary.js.map +1 -1
  28. package/contentLibraryItem.d.ts +3 -2
  29. package/contentLibraryItem.js +3 -2
  30. package/contentLibraryItem.js.map +1 -1
  31. package/customAttribute.d.ts +2 -3
  32. package/customAttribute.js +2 -3
  33. package/customAttribute.js.map +1 -1
  34. package/datacenter.d.ts +18 -8
  35. package/datacenter.js +4 -3
  36. package/datacenter.js.map +1 -1
  37. package/datastoreCluster.d.ts +37 -25
  38. package/datastoreCluster.js +10 -10
  39. package/datastoreCluster.js.map +1 -1
  40. package/datastoreClusterVmAntiAffinityRule.d.ts +37 -22
  41. package/datastoreClusterVmAntiAffinityRule.js +13 -13
  42. package/datastoreClusterVmAntiAffinityRule.js.map +1 -1
  43. package/distributedPortGroup.d.ts +19 -9
  44. package/distributedPortGroup.js +7 -6
  45. package/distributedPortGroup.js.map +1 -1
  46. package/distributedVirtualSwitch.d.ts +27 -10
  47. package/distributedVirtualSwitch.js +3 -4
  48. package/distributedVirtualSwitch.js.map +1 -1
  49. package/dpmHostOverride.d.ts +21 -16
  50. package/dpmHostOverride.js +9 -10
  51. package/dpmHostOverride.js.map +1 -1
  52. package/drsVmOverride.d.ts +22 -17
  53. package/drsVmOverride.js +10 -11
  54. package/drsVmOverride.js.map +1 -1
  55. package/entityPermissions.d.ts +58 -0
  56. package/entityPermissions.js +58 -0
  57. package/entityPermissions.js.map +1 -1
  58. package/file.d.ts +15 -0
  59. package/file.js +15 -0
  60. package/file.js.map +1 -1
  61. package/folder.d.ts +37 -19
  62. package/folder.js +7 -10
  63. package/folder.js.map +1 -1
  64. package/getComputeCluster.d.ts +35 -19
  65. package/getComputeCluster.js +24 -10
  66. package/getComputeCluster.js.map +1 -1
  67. package/getCustomAttribute.d.ts +10 -6
  68. package/getCustomAttribute.js +10 -6
  69. package/getCustomAttribute.js.map +1 -1
  70. package/getDatacenter.d.ts +10 -6
  71. package/getDatacenter.js +10 -6
  72. package/getDatacenter.js.map +1 -1
  73. package/getDatastore.d.ts +22 -16
  74. package/getDatastore.js +12 -8
  75. package/getDatastore.js.map +1 -1
  76. package/getDatastoreCluster.d.ts +24 -10
  77. package/getDatastoreCluster.js +20 -6
  78. package/getDatastoreCluster.js.map +1 -1
  79. package/getDistributedVirtualSwitch.d.ts +25 -19
  80. package/getDistributedVirtualSwitch.js +12 -8
  81. package/getDistributedVirtualSwitch.js.map +1 -1
  82. package/getHost.d.ts +23 -13
  83. package/getHost.js +8 -4
  84. package/getHost.js.map +1 -1
  85. package/getNetwork.d.ts +12 -8
  86. package/getNetwork.js.map +1 -1
  87. package/getOvfVmTemplate.d.ts +276 -0
  88. package/getOvfVmTemplate.js +276 -0
  89. package/getOvfVmTemplate.js.map +1 -1
  90. package/getResourcePool.d.ts +38 -26
  91. package/getResourcePool.js +16 -8
  92. package/getResourcePool.js.map +1 -1
  93. package/getTag.d.ts +14 -10
  94. package/getTag.js +14 -10
  95. package/getTag.js.map +1 -1
  96. package/getTagCategory.d.ts +8 -4
  97. package/getTagCategory.js +8 -4
  98. package/getTagCategory.js.map +1 -1
  99. package/getVappContainer.d.ts +16 -6
  100. package/getVappContainer.js +6 -2
  101. package/getVappContainer.js.map +1 -1
  102. package/getVirtualMachine.d.ts +58 -36
  103. package/getVirtualMachine.js +10 -6
  104. package/getVirtualMachine.js.map +1 -1
  105. package/getVmfsDisks.d.ts +12 -4
  106. package/getVmfsDisks.js +6 -2
  107. package/getVmfsDisks.js.map +1 -1
  108. package/haVmOverride.d.ts +8 -10
  109. package/haVmOverride.js +8 -10
  110. package/haVmOverride.js.map +1 -1
  111. package/host.d.ts +54 -80
  112. package/host.js +54 -80
  113. package/host.js.map +1 -1
  114. package/hostPortGroup.d.ts +21 -11
  115. package/hostPortGroup.js +8 -4
  116. package/hostPortGroup.js.map +1 -1
  117. package/hostVirtualSwitch.d.ts +21 -17
  118. package/hostVirtualSwitch.js +9 -11
  119. package/hostVirtualSwitch.js.map +1 -1
  120. package/nasDatastore.d.ts +48 -35
  121. package/nasDatastore.js +9 -8
  122. package/nasDatastore.js.map +1 -1
  123. package/package.json +2 -2
  124. package/resourcePool.d.ts +31 -7
  125. package/resourcePool.js +13 -1
  126. package/resourcePool.js.map +1 -1
  127. package/role.d.ts +31 -2
  128. package/role.js +31 -2
  129. package/role.js.map +1 -1
  130. package/storageDrsVmOverride.d.ts +40 -17
  131. package/storageDrsVmOverride.js +19 -8
  132. package/storageDrsVmOverride.js.map +1 -1
  133. package/tag.d.ts +16 -15
  134. package/tag.js +16 -15
  135. package/tag.js.map +1 -1
  136. package/tagCategory.d.ts +2 -3
  137. package/tagCategory.js +2 -3
  138. package/tagCategory.js.map +1 -1
  139. package/types/input.d.ts +5 -3
  140. package/types/output.d.ts +5 -3
  141. package/vappContainer.d.ts +21 -12
  142. package/vappContainer.js +0 -3
  143. package/vappContainer.js.map +1 -1
  144. package/vappEntity.d.ts +14 -11
  145. package/vappEntity.js +2 -5
  146. package/vappEntity.js.map +1 -1
  147. package/virtualDisk.d.ts +18 -10
  148. package/virtualDisk.js +9 -7
  149. package/virtualDisk.js.map +1 -1
  150. package/virtualMachine.d.ts +1102 -10
  151. package/virtualMachine.js +1056 -6
  152. package/virtualMachine.js.map +1 -1
  153. package/virtualMachineSnapshot.d.ts +2 -1
  154. package/virtualMachineSnapshot.js +2 -1
  155. package/virtualMachineSnapshot.js.map +1 -1
  156. package/vmfsDatastore.d.ts +54 -42
  157. package/vmfsDatastore.js +12 -15
  158. package/vmfsDatastore.js.map +1 -1
  159. package/vnic.d.ts +4 -3
  160. package/vnic.js +4 -3
  161. package/vnic.js.map +1 -1
@@ -2,27 +2,1077 @@ import * as pulumi from "@pulumi/pulumi";
2
2
  import * as inputs from "./types/input";
3
3
  import * as outputs from "./types/output";
4
4
  /**
5
+ * The `vsphere.VirtualMachine` resource is used to manage the lifecycle of a virtual machine.
6
+ *
7
+ * For details on working with virtual machines in VMware vSphere, please refer to the [product documentation][vmware-docs-vm-management].
8
+ *
9
+ * [vmware-docs-vm-management]: https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-virtual-machine-administration-guide-8-0.html
10
+ *
11
+ * ## About Working with Virtual Machines in Terraform
12
+ *
13
+ * A high degree of control and flexibility is available to a vSphere administrator to configure, deploy, and manage virtual machines. The Terraform provider enables you to manage the desired state of virtual machine resources.
14
+ *
15
+ * This section provides information on configurations you should consider when setting up virtual machines, creating templates for cloning, and more.
16
+ *
17
+ * ### Disks
18
+ *
19
+ * The `vsphere.VirtualMachine` resource supports standard VMDK-backed virtual disks. It **does not** support raw device mappings (RDMs) to proxy use of raw physical storage device
20
+ *
21
+ * Disks are managed by a label supplied to the `label` attribute in a `disk` block. This is separate from the automatic naming that vSphere assigns when a virtual machine is created. Control of the name for a virtual disk is not supported unless you are attaching an external disk with the `attach` attribute.
22
+ *
23
+ * Virtual disks can be SCSI, SATA, NVMe or IDE. The storage controllers managed by the Terraform provider can vary, depending on the value supplied to `scsiControllerCount`, `sataControllerCount`, `nvmeControllerCount`, or `ideControllerCount`. This also dictates the controllers that are checked when looking for disks during a cloning process. SCSI controllers are all configured with the controller type defined by the `scsiType` setting. If you are cloning from a template, devices will be added or re-configured as necessary.
24
+ *
25
+ * When cloning from a template, you must specify disks of either the same or greater size than the disks in the source template or the same size when cloning from a snapshot (also known as a linked clone).
26
+ *
27
+ * See the section on Creating a Virtual Machine from a Template for more information.
28
+ *
29
+ * ### Customization and Network Waiters
30
+ *
31
+ * Terraform waits during various parts of a virtual machine deployment to ensure that the virtual machine is in an expected state before proceeding. These events occur when a virtual machine is created or updated, depending on the waiter.
32
+ *
33
+ * The waiters include the following:
34
+ *
35
+ * * **Customization Waiter**:
36
+ *
37
+ * This waiter watches events in vSphere to monitor when customization on a virtual machine completes during creation. Depending on your vSphere or virtual machine configuration, it may be necessary to change the timeout or turn off the waiter. This can be controlled by using the `timeout` setting in the customization settings block.
38
+ *
39
+ * * **Network Waiter**:
40
+ *
41
+ * This waiter waits for interfaces to appear on a virtual machine guest operating system and occurs close to the end of both virtual machine creation and update. This waiter ensures that the IP information gets reported to the guest operating system, mainly to facilitate the availability of a valid, reachable default IP address for any provisioners.
42
+ *
43
+ * The behavior of the waiter can be controlled with the `waitForGuestNetTimeout`, `waitForGuestNetRoutable`, `waitForGuestIpTimeout`, and `ignoredGuestIps` settings.
44
+ *
45
+ * ## Example Usage
46
+ *
47
+ * ### Creating a Virtual Machine
48
+ *
49
+ * The following block contains the option necessary to create a virtual machine, with a single disk and network interface.
50
+ *
51
+ * In this example, the resource makes use of the following data sources:
52
+ *
53
+ * * [`vsphere.Datacenter`][tf-vsphere-datacenter] to locate the datacenter,
54
+ *
55
+ * * [`vsphere.getDatastore`][tf-vsphere-datastore] to locate the default datastore to place the virtual machine files,
56
+ *
57
+ * * [`vsphere_compute-cluster`][tf-vsphere-compute-cluster] to locate a resource pool located in a cluster or standalone host, and
58
+ *
59
+ * * [`vsphere.getNetwork`][tf-vsphere-network] to locate the network.
60
+ *
61
+ * [tf-vsphere-datacenter]: /docs/providers/vsphere/d/datacenter.html
62
+ * [tf-vsphere-datastore]: /docs/providers/vsphere/d/datastore.html
63
+ * [tf-vsphere-compute-cluster]: /docs/providers/vsphere/d/compute-cluster.html
64
+ * [tf-vsphere-network]: /docs/providers/vsphere/d/network.html
65
+ *
66
+ * **Example**:
67
+ *
68
+ * ```typescript
69
+ * import * as pulumi from "@pulumi/pulumi";
70
+ * import * as vsphere from "@pulumi/vsphere";
71
+ *
72
+ * const datacenter = vsphere.getDatacenter({
73
+ * name: "dc-01",
74
+ * });
75
+ * const datastore = datacenter.then(datacenter => vsphere.getDatastore({
76
+ * name: "datastore-01",
77
+ * datacenterId: datacenter.id,
78
+ * }));
79
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
80
+ * name: "cluster-01",
81
+ * datacenterId: datacenter.id,
82
+ * }));
83
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
84
+ * name: "VM Network",
85
+ * datacenterId: datacenter.id,
86
+ * }));
87
+ * const vm = new vsphere.VirtualMachine("vm", {
88
+ * name: "foo",
89
+ * resourcePoolId: cluster.then(cluster => cluster.resourcePoolId),
90
+ * datastoreId: datastore.then(datastore => datastore.id),
91
+ * numCpus: 1,
92
+ * memory: 1024,
93
+ * guestId: "otherLinux64Guest",
94
+ * networkInterfaces: [{
95
+ * networkId: network.then(network => network.id),
96
+ * }],
97
+ * disks: [{
98
+ * label: "Hard Disk 1",
99
+ * size: 20,
100
+ * }],
101
+ * });
102
+ * ```
103
+ *
104
+ * ### Cloning and Customization
105
+ *
106
+ * Building on the above example, the below configuration creates a virtual machine by cloning it from a template, fetched using the [`vsphere.VirtualMachine`][tf-vsphere-virtual-machine-ds] data source. This option allows you to locate the UUID of the template to clone, along with settings for network interface type, SCSI bus type, and disk attributes.
107
+ *
108
+ * [tf-vsphere-virtual-machine-ds]: /docs/providers/vsphere/d/virtual_machine.html
109
+ *
110
+ * > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
111
+ *
112
+ * **Examples**:
113
+ *
114
+ * This example clones a Linux template and customizes with the provided settings:
115
+ *
116
+ * ```typescript
117
+ * import * as pulumi from "@pulumi/pulumi";
118
+ * import * as vsphere from "@pulumi/vsphere";
119
+ *
120
+ * const datacenter = vsphere.getDatacenter({
121
+ * name: "dc-01",
122
+ * });
123
+ * const datastore = datacenter.then(datacenter => vsphere.getDatastore({
124
+ * name: "datastore-01",
125
+ * datacenterId: datacenter.id,
126
+ * }));
127
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
128
+ * name: "cluster-01",
129
+ * datacenterId: datacenter.id,
130
+ * }));
131
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
132
+ * name: "VM Network",
133
+ * datacenterId: datacenter.id,
134
+ * }));
135
+ * const template = datacenter.then(datacenter => vsphere.getVirtualMachine({
136
+ * name: "linux-template",
137
+ * datacenterId: datacenter.id,
138
+ * }));
139
+ * const vm = new vsphere.VirtualMachine("vm", {
140
+ * name: "foo",
141
+ * resourcePoolId: cluster.then(cluster => cluster.resourcePoolId),
142
+ * datastoreId: datastore.then(datastore => datastore.id),
143
+ * numCpus: 1,
144
+ * memory: 1024,
145
+ * guestId: template.then(template => template.guestId),
146
+ * scsiType: template.then(template => template.scsiType),
147
+ * networkInterfaces: [{
148
+ * networkId: network.then(network => network.id),
149
+ * adapterType: template.then(template => template.networkInterfaceTypes?.[0]),
150
+ * }],
151
+ * disks: [{
152
+ * label: "Hard Disk 1",
153
+ * size: template.then(template => template.disks?.[0]?.size),
154
+ * thinProvisioned: template.then(template => template.disks?.[0]?.thinProvisioned),
155
+ * }],
156
+ * clone: {
157
+ * templateUuid: template.then(template => template.id),
158
+ * customize: {
159
+ * linuxOptions: {
160
+ * hostName: "foo",
161
+ * domain: "example.com",
162
+ * },
163
+ * },
164
+ * },
165
+ * });
166
+ * ```
167
+ *
168
+ * This example uses the same structure as the previous example, but customizes with an existing guest customization specification:
169
+ *
170
+ * ```typescript
171
+ * import * as pulumi from "@pulumi/pulumi";
172
+ * import * as vsphere from "@pulumi/vsphere";
173
+ *
174
+ * // ... other configuration ...
175
+ * const linux = vsphere.getGuestOsCustomization({
176
+ * name: "linux",
177
+ * });
178
+ * const vm = new vsphere.VirtualMachine("vm", {
179
+ * templateUuid: template.id,
180
+ * customizationSpec: [{
181
+ * id: linux.then(linux => linux.id),
182
+ * }],
183
+ * });
184
+ * ```
185
+ *
186
+ * ### Deploying Virtual Machines from OVF/OVA
187
+ *
188
+ * Virtual machines can be deployed from OVF/OVA using either the local path and remote URL and the `ovfDeploy` property. When deploying from a local path, the path to the OVF/OVA must be provided. While deploying OVF, all other necessary files (_e.g._ `.vmdk`, `.mf`, etc) must be present in the same directory as the `.ovf` file.
189
+ *
190
+ * > **NOTE:** The vApp properties which are pre-defined in an OVF template can be overwritten. New vApp properties can not be created for an existing OVF template.
191
+ *
192
+ * > **NOTE:** An OVF/OVA deployment requires vCenter Server and is not supported on direct ESXi host connections.
193
+ *
194
+ * The following example demonstrates a scenario deploying a simple OVF/OVA, using both the local path and remote URL options.
195
+ *
196
+ * **Example**:
197
+ *
198
+ * ```typescript
199
+ * import * as pulumi from "@pulumi/pulumi";
200
+ * import * as std from "@pulumi/std";
201
+ * import * as vsphere from "@pulumi/vsphere";
202
+ *
203
+ * const datacenter = vsphere.getDatacenter({
204
+ * name: "dc-01",
205
+ * });
206
+ * const datastore = datacenter.then(datacenter => vsphere.getDatastore({
207
+ * name: "datastore-01",
208
+ * datacenterId: datacenter.id,
209
+ * }));
210
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
211
+ * name: "cluster-01",
212
+ * datacenterId: datacenter.id,
213
+ * }));
214
+ * const _default = Promise.all([cluster, datacenter]).then(([cluster, datacenter]) => vsphere.getResourcePool({
215
+ * name: std.index.format({
216
+ * input: "%s%s",
217
+ * args: [
218
+ * cluster.name,
219
+ * "/Resources",
220
+ * ],
221
+ * }).result,
222
+ * datacenterId: datacenter.id,
223
+ * }));
224
+ * const host = datacenter.then(datacenter => vsphere.getHost({
225
+ * name: "esxi-01.example.com",
226
+ * datacenterId: datacenter.id,
227
+ * }));
228
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
229
+ * name: "172.16.11.0",
230
+ * datacenterId: datacenter.id,
231
+ * }));
232
+ * //# Deployment of VM from Remote OVF
233
+ * const vmFromRemoteOvf = new vsphere.VirtualMachine("vmFromRemoteOvf", {
234
+ * name: "remote-foo",
235
+ * datacenterId: datacenter.then(datacenter => datacenter.id),
236
+ * datastoreId: datastore.then(datastore => datastore.i),
237
+ * resourcePoolId: _default.then(_default => _default.id),
238
+ * waitForGuestNetTimeout: 0,
239
+ * waitForGuestIpTimeout: 0,
240
+ * ovfDeploy: {
241
+ * allowUnverifiedSslCert: false,
242
+ * remoteOvfUrl: "https://example.com/foo.ova",
243
+ * diskProvisioning: "thin",
244
+ * ipProtocol: "IPV4",
245
+ * ipAllocationPolicy: "STATIC_MANUAL",
246
+ * ovfNetworkMap: {
247
+ * "Network 1": network.then(network => network.id),
248
+ * "Network 2": network.then(network => network.id),
249
+ * },
250
+ * },
251
+ * vapp: {
252
+ * properties: {
253
+ * "guestinfo.hostname": "remote-foo.example.com",
254
+ * "guestinfo.ipaddress": "172.16.11.101",
255
+ * "guestinfo.netmask": "255.255.255.0",
256
+ * "guestinfo.gateway": "172.16.11.1",
257
+ * "guestinfo.dns": "172.16.11.4",
258
+ * "guestinfo.domain": "example.com",
259
+ * "guestinfo.ntp": "ntp.example.com",
260
+ * "guestinfo.password": "VMware1!",
261
+ * "guestinfo.ssh": "True",
262
+ * },
263
+ * },
264
+ * });
265
+ * //# Deployment of VM from Local OVF
266
+ * const vmFromLocalOvf = new vsphere.VirtualMachine("vmFromLocalOvf", {
267
+ * name: "local-foo",
268
+ * datacenterId: datacenter.then(datacenter => datacenter.id),
269
+ * datastoreId: datastore.then(datastore => datastore.id),
270
+ * resourcePoolId: _default.then(_default => _default.id),
271
+ * waitForGuestNetTimeout: 0,
272
+ * waitForGuestIpTimeout: 0,
273
+ * ovfDeploy: {
274
+ * allowUnverifiedSslCert: false,
275
+ * localOvfPath: "/Volume/Storage/OVAs/foo.ova",
276
+ * diskProvisioning: "thin",
277
+ * ipProtocol: "IPV4",
278
+ * ipAllocationPolicy: "STATIC_MANUAL",
279
+ * ovfNetworkMap: {
280
+ * "Network 1": network.then(network => network.id),
281
+ * "Network 2": network.then(network => network.id),
282
+ * },
283
+ * },
284
+ * vapp: {
285
+ * properties: {
286
+ * "guestinfo.hostname": "local-foo.example.com",
287
+ * "guestinfo.ipaddress": "172.16.11.101",
288
+ * "guestinfo.netmask": "255.255.255.0",
289
+ * "guestinfo.gateway": "172.16.11.1",
290
+ * "guestinfo.dns": "172.16.11.4",
291
+ * "guestinfo.domain": "example.com",
292
+ * "guestinfo.ntp": "ntp.example.com",
293
+ * "guestinfo.password": "VMware1!",
294
+ * "guestinfo.ssh": "True",
295
+ * },
296
+ * },
297
+ * });
298
+ * ```
299
+ *
300
+ * In some scenarios, the Terraform provider may attempt to apply only the default settings. A virtual machine deployed directly from an OVF/OVA may not match the OVF specification. For example, if the `scsiType` option is not included in a `vsphere.VirtualMachine` resource, the provider will apply a default value of `pvscsi` and the virtual machine may not boot. In this scenario, use the `vsphere.getOvfVmTemplate` data source to parse the OVF properties and use the property value as parameters for the `vsphere.VirtualMachine` resource.
301
+ *
302
+ * The following example demonstrates a scenario deploying a nested ESXi host from an OVF/OVA, using the remote URL and local path options.
303
+ *
304
+ * **Example**:
305
+ *
306
+ * ```typescript
307
+ * import * as pulumi from "@pulumi/pulumi";
308
+ * import * as std from "@pulumi/std";
309
+ * import * as vsphere from "@pulumi/vsphere";
310
+ *
311
+ * const datacenter = vsphere.getDatacenter({
312
+ * name: "dc-01",
313
+ * });
314
+ * const datastore = datacenter.then(datacenter => vsphere.getDatastore({
315
+ * name: "datastore-01",
316
+ * datacenterId: datacenter.id,
317
+ * }));
318
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
319
+ * name: "cluster-01",
320
+ * datacenterId: datacenter.id,
321
+ * }));
322
+ * const _default = Promise.all([cluster, datacenter]).then(([cluster, datacenter]) => vsphere.getResourcePool({
323
+ * name: std.index.format({
324
+ * input: "%s%s",
325
+ * args: [
326
+ * cluster.name,
327
+ * "/Resources",
328
+ * ],
329
+ * }).result,
330
+ * datacenterId: datacenter.id,
331
+ * }));
332
+ * const host = datacenter.then(datacenter => vsphere.getHost({
333
+ * name: "esxi-01.example.com",
334
+ * datacenterId: datacenter.id,
335
+ * }));
336
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
337
+ * name: "172.16.11.0",
338
+ * datacenterId: datacenter.id,
339
+ * }));
340
+ * //# Remote OVF/OVA Source
341
+ * const ovfRemote = Promise.all([_default, datastore, network]).then(([_default, datastore, network]) => vsphere.getOvfVmTemplate({
342
+ * name: "ubuntu-xx.xx-server-cloudimg-amd64.ova",
343
+ * diskProvisioning: "thin",
344
+ * resourcePoolId: _default.id,
345
+ * datastoreId: datastore.id,
346
+ * remoteOvfUrl: "https://cloud-images.ubuntu.com/releases/xx.xx/release/ubuntu-xx.xx-server-cloudimg-amd64.ova",
347
+ * ovfNetworkMap: {
348
+ * "VM Network": network.id,
349
+ * },
350
+ * }));
351
+ * //# Local OVF/OVA Source
352
+ * const ovfLocal = Promise.all([_default, datastore, network]).then(([_default, datastore, network]) => vsphere.getOvfVmTemplate({
353
+ * name: "ubuntu-xx.xx-server-cloudimg-amd64.ova",
354
+ * diskProvisioning: "thin",
355
+ * resourcePoolId: _default.id,
356
+ * datastoreId: datastore.id,
357
+ * localOvfPath: "/Volume/Storage/OVA/ubuntu-xx-xx-server-cloudimg-amd64.ova",
358
+ * ovfNetworkMap: {
359
+ * "VM Network": network.id,
360
+ * },
361
+ * }));
362
+ * //# Deployment of VM from Remote OVF
363
+ * const vmFromRemoteOvf = new vsphere.VirtualMachine("vmFromRemoteOvf", {
364
+ * networkInterfaces: .map(entry => ({
365
+ * networkId: entry.value,
366
+ * })),
367
+ * name: "ubuntu-server-cloud-image-01",
368
+ * datacenterId: datacenter.then(datacenter => datacenter.id),
369
+ * datastoreId: datastore.then(datastore => datastore.id),
370
+ * resourcePoolId: _default.then(_default => _default.id),
371
+ * numCpus: ovfRemote.then(ovfRemote => ovfRemote.numCpus),
372
+ * numCoresPerSocket: ovfRemote.then(ovfRemote => ovfRemote.numCoresPerSocket),
373
+ * memory: ovfRemote.then(ovfRemote => ovfRemote.memory),
374
+ * guestId: ovfRemote.then(ovfRemote => ovfRemote.guestId),
375
+ * firmware: ovfRemote.then(ovfRemote => ovfRemote.firmware),
376
+ * scsiType: ovfRemote.then(ovfRemote => ovfRemote.scsiType),
377
+ * waitForGuestNetTimeout: 0,
378
+ * waitForGuestIpTimeout: 0,
379
+ * ovfDeploy: {
380
+ * remoteOvfUrl: "https://cloud-images.ubuntu.com/releases/xx.xx/release/ubuntu-xx.xx-server-cloudimg-amd64.ova",
381
+ * ovfNetworkMap: ovfRemote.then(ovfRemote => ovfRemote.ovfNetworkMap),
382
+ * },
383
+ * cdroms: [{
384
+ * clientDevice: true,
385
+ * }],
386
+ * vapp: {
387
+ * properties: {
388
+ * hostname: remoteOvfName,
389
+ * "instance-id": remoteOvfUuid,
390
+ * "public-keys": remoteOvfPublicKeys,
391
+ * password: remoteOvfPassword,
392
+ * "user-data": std.index.base64encode({
393
+ * input: remoteOvfUserData,
394
+ * }).result,
395
+ * },
396
+ * },
397
+ * });
398
+ * //# Deployment of VM from Local OVF
399
+ * const vmFromLocalOvf = new vsphere.VirtualMachine("vmFromLocalOvf", {
400
+ * networkInterfaces: .map(entry => ({
401
+ * networkId: entry.value,
402
+ * })),
403
+ * name: "ubuntu-server-cloud-image-02",
404
+ * datacenterId: datacenter.then(datacenter => datacenter.id),
405
+ * datastoreId: datastore.then(datastore => datastore.id),
406
+ * resourcePoolId: _default.then(_default => _default.id),
407
+ * numCpus: ovfLocal.then(ovfLocal => ovfLocal.numCpus),
408
+ * numCoresPerSocket: ovfLocal.then(ovfLocal => ovfLocal.numCoresPerSocket),
409
+ * memory: ovfLocal.then(ovfLocal => ovfLocal.memory),
410
+ * guestId: ovfLocal.then(ovfLocal => ovfLocal.guestId),
411
+ * firmware: ovfLocal.then(ovfLocal => ovfLocal.firmware),
412
+ * scsiType: ovfLocal.then(ovfLocal => ovfLocal.scsiType),
413
+ * waitForGuestNetTimeout: 0,
414
+ * waitForGuestIpTimeout: 0,
415
+ * ovfDeploy: {
416
+ * allowUnverifiedSslCert: false,
417
+ * localOvfPath: ovfLocal.then(ovfLocal => ovfLocal.localOvfPath),
418
+ * diskProvisioning: ovfLocal.then(ovfLocal => ovfLocal.diskProvisioning),
419
+ * ovfNetworkMap: ovfLocal.then(ovfLocal => ovfLocal.ovfNetworkMap),
420
+ * },
421
+ * cdroms: [{
422
+ * clientDevice: true,
423
+ * }],
424
+ * vapp: {
425
+ * properties: {
426
+ * hostname: localOvfName,
427
+ * "instance-id": localOvfUuid,
428
+ * "public-keys": localOvfPublicKeys,
429
+ * password: localOvfPassword,
430
+ * "user-data": std.index.base64encode({
431
+ * input: localOvfUserData,
432
+ * }).result,
433
+ * },
434
+ * },
435
+ * });
436
+ * ```
437
+ *
438
+ * ### Cloning from an OVF/OVA with vApp Properties
439
+ *
440
+ * This alternate example illustrates how to clone a virtual machine from a template that originated from an OVF/OVA. This leverages the resource's vApp properties capabilities to set appropriate keys that control various configuration settings on the virtual machine or virtual appliance. In this scenario, using `customize` is not recommended as the functionality tends to overlap.
441
+ *
442
+ * **Example**:
443
+ *
444
+ * ```typescript
445
+ * import * as pulumi from "@pulumi/pulumi";
446
+ * import * as std from "@pulumi/std";
447
+ * import * as vsphere from "@pulumi/vsphere";
448
+ *
449
+ * const datacenter = vsphere.getDatacenter({
450
+ * name: "dc-01",
451
+ * });
452
+ * const datastore = datacenter.then(datacenter => vsphere.getDatastore({
453
+ * name: "datastore-01",
454
+ * datacenterId: datacenter.id,
455
+ * }));
456
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
457
+ * name: "cluster-01",
458
+ * datacenterId: datacenter.id,
459
+ * }));
460
+ * const _default = Promise.all([cluster, datacenter]).then(([cluster, datacenter]) => vsphere.getResourcePool({
461
+ * name: std.index.format({
462
+ * input: "%s%s",
463
+ * args: [
464
+ * cluster.name,
465
+ * "/Resources",
466
+ * ],
467
+ * }).result,
468
+ * datacenterId: datacenter.id,
469
+ * }));
470
+ * const host = datacenter.then(datacenter => vsphere.getHost({
471
+ * name: "esxi-01.example.com",
472
+ * datacenterId: datacenter.id,
473
+ * }));
474
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
475
+ * name: "172.16.11.0",
476
+ * datacenterId: datacenter.id,
477
+ * }));
478
+ * const templateFromOvf = datacenter.then(datacenter => vsphere.getVirtualMachine({
479
+ * name: "ubuntu-server-template-from-ova",
480
+ * datacenterId: datacenter.id,
481
+ * }));
482
+ * const vm = new vsphere.VirtualMachine("vm", {
483
+ * name: "foo",
484
+ * resourcePoolId: cluster.then(cluster => cluster.resourcePoolId),
485
+ * datastoreId: datastore.then(datastore => datastore.id),
486
+ * numCpus: 2,
487
+ * memory: 1024,
488
+ * guestId: template.guestId,
489
+ * scsiType: template.scsiType,
490
+ * networkInterfaces: [{
491
+ * networkId: network.then(network => network.id),
492
+ * adapterType: template.networkInterfaceTypes[0],
493
+ * }],
494
+ * disks: [{
495
+ * name: "Hard Disk 1",
496
+ * size: templateFromOvf.then(templateFromOvf => templateFromOvf.disks?.[0]?.size),
497
+ * thinProvisioned: templateFromOvf.then(templateFromOvf => templateFromOvf.disks?.[0]?.thinProvisioned),
498
+ * }],
499
+ * clone: {
500
+ * templateUuid: templateFromOvf.then(templateFromOvf => templateFromOvf.id),
501
+ * },
502
+ * vapp: {
503
+ * properties: {
504
+ * "guestinfo.hostname": "foo.example.com",
505
+ * "guestinfo.ipaddress": "172.16.11.101",
506
+ * "guestinfo.netmask": "255.255.255.0",
507
+ * "guestinfo.gateway": "172.16.11.1",
508
+ * "guestinfo.dns": "172.16.11.4",
509
+ * "guestinfo.domain": "example.com",
510
+ * "guestinfo.ntp": "ntp.example.com",
511
+ * "guestinfo.password": "VMware1!",
512
+ * "guestinfo.ssh": "True",
513
+ * },
514
+ * },
515
+ * });
516
+ * ```
517
+ *
518
+ * ### Using vSphere Storage DRS
519
+ *
520
+ * The `vsphere.VirtualMachine` resource also supports vSphere Storage DRS, allowing the assignment of virtual machines to datastore clusters. When assigned to a datastore cluster, changes to a virtual machine's underlying datastores are ignored unless disks drift outside of the datastore cluster. Note that the [`vsphere.DatastoreCluster`][tf-vsphere-datastore-cluster-resource] resource also exists to allow for management of datastore clusters using the Terraform provider.
521
+ *
522
+ * The following example demonstrates the use of the [`vsphere.DatastoreCluster`] data source[tf-vsphere-datastore-cluster-data-source], and the `datastoreClusterId` configuration setting.
523
+ *
524
+ * [tf-vsphere-datastore-cluster-resource]: /docs/providers/vsphere/r/datastore_cluster.html
525
+ * [tf-vsphere-datastore-cluster-data-source]: /docs/providers/vsphere/d/datastore_cluster.html
526
+ *
527
+ * > **NOTE:** When managing datastore clusters, member datastores, and virtual machines within the same Terraform configuration, race conditions can apply. This is because datastore clusters must be created before datastores can be assigned to them, and the respective `vsphere.VirtualMachine` resources will no longer have an implicit dependency on the specific datastore resources. Use [`dependsOn`][tf-docs-depends-on] to create an explicit dependency on the datastores in the cluster, or manage datastore clusters and datastores in a separate configuration.
528
+ *
529
+ * [tf-docs-depends-on]: /docs/configuration/resources.html#depends_on
530
+ *
531
+ * **Example**:
532
+ *
533
+ * ```typescript
534
+ * import * as pulumi from "@pulumi/pulumi";
535
+ * import * as vsphere from "@pulumi/vsphere";
536
+ *
537
+ * const datacenter = vsphere.getDatacenter({
538
+ * name: "dc-01",
539
+ * });
540
+ * const datastoreCluster = datacenter.then(datacenter => vsphere.getDatastoreCluster({
541
+ * name: "datastore-cluster-01",
542
+ * datacenterId: datacenter.id,
543
+ * }));
544
+ * const cluster = datacenter.then(datacenter => vsphere.getComputeCluster({
545
+ * name: "cluster-01",
546
+ * datacenterId: datacenter.id,
547
+ * }));
548
+ * const network = datacenter.then(datacenter => vsphere.getNetwork({
549
+ * name: "VM Network",
550
+ * datacenterId: datacenter.id,
551
+ * }));
552
+ * const vm = new vsphere.VirtualMachine("vm", {
553
+ * name: "foo",
554
+ * resourcePoolId: cluster.then(cluster => cluster.resourcePoolId),
555
+ * datastoreClusterId: datastoreCluster.then(datastoreCluster => datastoreCluster.id),
556
+ * numCpus: 1,
557
+ * memory: 1024,
558
+ * guestId: "otherLinux64Guest",
559
+ * networkInterfaces: [{
560
+ * networkId: network.then(network => network.id),
561
+ * }],
562
+ * disks: [{
563
+ * label: "Hard Disk 1",
564
+ * size: 20,
565
+ * }],
566
+ * });
567
+ * ```
568
+ *
569
+ * ## Creating a Virtual Machine from a Template
570
+ *
571
+ * The `clone` block can be used to create a new virtual machine from an existing virtual machine or template. The resource supports both making a complete copy of a virtual machine, or cloning from a snapshot (also known as a linked clone).
572
+ *
573
+ * See the section on cloning and customization for more information.
574
+ *
575
+ * > **NOTE:** Changing any option in `clone` after creation forces a new resource.
576
+ *
577
+ * > **NOTE:** Cloning requires vCenter Server and is not supported on direct ESXi host connections.
578
+ *
579
+ * The options available in the `clone` block are:
580
+ *
581
+ * * `templateUuid` - (Required) The UUID of the source virtual machine or template.
582
+ *
583
+ * * `linkedClone` - (Optional) Clone the virtual machine from a snapshot or a template. Default: `false`.
584
+ *
585
+ * * `timeout` - (Optional) The timeout, in minutes, to wait for the cloning process to complete. Default: 30 minutes.
586
+ *
587
+ * * `customize` - (Optional) The customization spec for this clone. This allows the user to configure the virtual machine post-clone. For more details, see virtual machine customizations.
588
+ *
589
+ * ### Virtual Machine Customizations
590
+ *
591
+ * As part of the `clone` operation, a virtual machine can be [customized][vmware-docs-customize] to configure host, network, or licensing settings.
592
+ *
593
+ * [vmware-docs-customize]: https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-virtual-machine-administration-guide-8-0/managing-virtual-machinesvsphere-vm-admin/customizing-guest-operating-systemsvsphere-vm-admin.html
594
+ *
595
+ * To perform virtual machine customization as a part of the clone process,
596
+ * specify the `customize` block with the respective customization options, nested within the `clone` block. Windows guests are customized using Sysprep, which will result in the machine SID being reset. Before using customization, check is that your source virtual machine meets the [requirements](https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-virtual-machine-administration-guide-8-0/managing-virtual-machinesvsphere-vm-admin/customizing-guest-operating-systemsvsphere-vm-admin.html) for guest OS customization on vSphere. See the section on cloning and customization for a usage synopsis.
597
+ *
598
+ * The settings for `customize` are as follows:
599
+ *
600
+ * #### Customization Timeout Settings
601
+ *
602
+ * * `timeout` - (Optional) The time, in minutes, that the provider waits for customization to complete before failing. The default is `10` minutes. Setting the value to `0` or a negative value disables the waiter.
603
+ *
604
+ * #### Network Interface Settings
605
+ *
606
+ * These settings, which should be specified in nested `networkInterface` blocks within `customize` block, configure network interfaces on a per-interface basis and are matched up to `networkInterface` devices in the order declared.
607
+ *
608
+ * Static IP Address Example:
609
+ *
610
+ * ```typescript
611
+ * import * as pulumi from "@pulumi/pulumi";
612
+ * import * as vsphere from "@pulumi/vsphere";
613
+ *
614
+ * const vm = new vsphere.VirtualMachine("vm", {
615
+ * networkInterfaces: [
616
+ * {
617
+ * networkId: _public.id,
618
+ * },
619
+ * {
620
+ * networkId: _private.id,
621
+ * },
622
+ * ],
623
+ * clone: {
624
+ * customize: {
625
+ * networkInterfaces: [
626
+ * {
627
+ * ipv4Address: "10.0.0.10",
628
+ * ipv4Netmask: 24,
629
+ * },
630
+ * {
631
+ * ipv4Address: "172.16.0.10",
632
+ * ipv4Netmask: 24,
633
+ * },
634
+ * ],
635
+ * ipv4Gateway: "10.0.0.1",
636
+ * },
637
+ * },
638
+ * });
639
+ * ```
640
+ *
641
+ * The first `networkInterface` would be assigned to the `public` interface, and the second to the `private` interface.
642
+ *
643
+ * To use DHCP, declare an empty `networkInterface` block for each interface.
644
+ *
645
+ * **Example**:
646
+ *
647
+ * ```typescript
648
+ * import * as pulumi from "@pulumi/pulumi";
649
+ * import * as vsphere from "@pulumi/vsphere";
650
+ *
651
+ * const vm = new vsphere.VirtualMachine("vm", {
652
+ * networkInterfaces: [
653
+ * {
654
+ * networkId: _public.id,
655
+ * },
656
+ * {
657
+ * networkId: _private.id,
658
+ * },
659
+ * ],
660
+ * clone: {
661
+ * customize: {
662
+ * networkInterfaces: [
663
+ * {},
664
+ * {},
665
+ * ],
666
+ * },
667
+ * },
668
+ * });
669
+ * ```
670
+ *
671
+ * The options are:
672
+ *
673
+ * * `dnsServerList` - (Optional) DNS servers for the network interface. Used by Windows guest operating systems, but ignored by Linux distribution guest operating systems. For Linux, please refer to the section on the global DNS settings.
674
+ *
675
+ * * `dnsDomain` - (Optional) DNS search domain for the network interface. Used by Windows guest operating systems, but ignored by Linux distribution guest operating systems. For Linux, please refer to the section on the global DNS settings.
676
+ *
677
+ * * `ipv4Address` - (Optional) The IPv4 address assigned to the network adapter. If blank or not included, DHCP is used.
678
+ *
679
+ * * `ipv4Netmask` The IPv4 subnet mask, in bits (_e.g._ `24` for 255.255.255.0).
680
+ *
681
+ * * `ipv6Address` - (Optional) The IPv6 address assigned to the network adapter. If blank or not included, auto-configuration is used.
682
+ *
683
+ * * `ipv6Netmask` - (Optional) The IPv6 subnet mask, in bits (_e.g._ `32`).
684
+ *
685
+ * > **NOTE:** The minimum setting for IPv4 in a customization specification is DHCP. If you are setting up an IPv6-exclusive network without DHCP, you may need to set `waitForGuestNetTimeout` to a high enough value to cover the DHCP timeout of your virtual machine, or disable by supplying a zero or negative value. Disabling `waitForGuestNetTimeout` may result in IP addresses not being reported to any provisioners you may have configured on the resource.
686
+ *
687
+ * #### Global Routing Settings
688
+ *
689
+ * Virtual machine customization for the `vsphere.VirtualMachine` resource does not take a per-interface gateway setting. Default routes are configured on a global basis. See the section on network interface settings for more information.
690
+ *
691
+ * The settings must match the IP address and netmask of at least one `networkInterface` supplied to customization.
692
+ *
693
+ * The options are:
694
+ *
695
+ * * `ipv4Gateway` - (Optional) The IPv4 default gateway when using `networkInterface` customization on the virtual machine.
696
+ *
697
+ * * `ipv6Gateway` - (Optional) The IPv6 default gateway when using `networkInterface` customization on the virtual machine.
698
+ *
699
+ * #### Global DNS Settings
700
+ *
701
+ * The following settings configure DNS globally, generally for Linux distribution guest operating systems. For Windows guest operating systems, this is performer per-interface. See the section on network interface settings for more information.
702
+ *
703
+ * * `dnsServerList` - The list of DNS servers to configure on the virtual machine.
704
+ *
705
+ * * `dnsSuffixList` - A list of DNS search domains to add to the DNS configuration on the virtual machine.
706
+ *
707
+ * #### Linux Customization Options
708
+ *
709
+ * The settings in the `linuxOptions` block pertain to Linux distribution guest operating system customization. If you are customizing a Linux guest operating system, this section must be included.
710
+ *
711
+ * **Example**:
712
+ *
713
+ * ```typescript
714
+ * import * as pulumi from "@pulumi/pulumi";
715
+ * import * as vsphere from "@pulumi/vsphere";
716
+ *
717
+ * const vm = new vsphere.VirtualMachine("vm", {clone: {
718
+ * customize: {
719
+ * linuxOptions: {
720
+ * hostName: "foo",
721
+ * domain: "example.com",
722
+ * },
723
+ * },
724
+ * }});
725
+ * ```
726
+ *
727
+ * The options are:
728
+ *
729
+ * * `hostName` - (Required) The host name for this machine. This, along with `domain`, make up the FQDN of the virtual machine.
730
+ *
731
+ * * `domain` - (Required) The domain name for this machine. This, along with `hostName`, make up the FQDN of the virtual machine.
732
+ *
733
+ * * `hwClockUtc` - (Optional) Tells the operating system that the hardware clock is set to UTC. Default: `true`.
734
+ *
735
+ * * `scriptText` - (Optional) The customization script for the virtual machine that will be applied before and / or after guest customization. For more information on enabling and using a customization script, please refer to [VMware KB 74880][kb-74880]. The [Heredoc style][tf-heredoc-strings] of string literal is recommended.
736
+ *
737
+ * [kb-74880]: https://knowledge.broadcom.com/external/article?articleNumber=313048
738
+ * [tf-heredoc-strings]: https://www.terraform.io/language/expressions/strings#heredoc-strings
739
+ *
740
+ * * `timeZone` - (Optional) Sets the time zone. For a list of possible combinations, please refer to [VMware KB 2145518][kb-2145518]. The default is UTC.
741
+ *
742
+ * [kb-2145518]: https://knowledge.broadcom.com/external/article?articleNumber=320212
743
+ *
744
+ * #### Windows Customization Options
745
+ *
746
+ * The settings in the `windowsOptions` block pertain to Windows guest OS customization. If you are customizing a Windows operating system, this section must be included.
747
+ *
748
+ * **Example**:
749
+ *
750
+ * ```typescript
751
+ * import * as pulumi from "@pulumi/pulumi";
752
+ * import * as vsphere from "@pulumi/vsphere";
753
+ *
754
+ * const vm = new vsphere.VirtualMachine("vm", {clone: {
755
+ * customize: {
756
+ * windowsOptions: {
757
+ * computerName: "foo",
758
+ * workgroup: "BAR",
759
+ * adminPassword: "VMware1!",
760
+ * },
761
+ * },
762
+ * }});
763
+ * ```
764
+ *
765
+ * The options are:
766
+ *
767
+ * * `computerName` - (Required) The computer name of the virtual machine.
768
+ *
769
+ * * `adminPassword` - (Optional) The administrator password for the virtual machine.
770
+ *
771
+ * > **NOTE:** `adminPassword` is a sensitive field and will not be output on-screen, but is stored in state and sent to the virtual machine in plain text.
772
+ *
773
+ * * `workgroup` - (Optional) The workgroup name for the virtual machine. One of this or `joinDomain` must be included.
774
+ *
775
+ * * `joinDomain` - (Optional) The domain name in which to join the virtual machine. One of this or `workgroup` must be included.
776
+ *
777
+ * * `domainOu` - (Optional) The `MachineObjectOU` which specifies the full LDAP path name of the OU to which the virtual machine belongs (_e.g._, OU=bar,OU=foo,DC=example,DC=com").
778
+ *
779
+ * > **NOTE:** `domainOu` is only available on vSphere 8.0 Update 2 and later.
780
+ *
781
+ * > **NOTE:** `domainOu` must **not** contain a spaces in the `MachineObjectOU` path (_e.g._, OU=foo bar,DC=example,DC=com").
782
+ *
783
+ * **Example**:
784
+ *
785
+ * ```typescript
786
+ * import * as pulumi from "@pulumi/pulumi";
787
+ * import * as vsphere from "@pulumi/vsphere";
788
+ *
789
+ * const vm = new vsphere.VirtualMachine("vm", {clone: {
790
+ * customize: {
791
+ * windowsOptions: {
792
+ * domainOu: "OU=bar,OU=foo,DC=example,DC=com",
793
+ * },
794
+ * },
795
+ * }});
796
+ * ```
797
+ *
798
+ * * `domainAdminUser` - (Optional) The user account with administrative privileges to use to join the guest operating system to the domain. Required if setting `joinDomain`.
799
+ *
800
+ * * `domainAdminPassword` - (Optional) The password user account with administrative privileges used to join the virtual machine to the domain. Required if setting `joinDomain`.
801
+ *
802
+ * > **NOTE:** `domainAdminPassword` is a sensitive field and will not be output on-screen, but is stored in state and sent to the virtual machine in plain text
803
+ *
804
+ * * `fullName` - (Optional) The full name of the organization owner of the virtual machine. This populates the "user" field in the general Windows system information. Default: `Administrator`.
805
+ *
806
+ * * `organizationName` - (Optional) The name of the organization for the virtual machine. This option populates the "organization" field in the general Windows system information. Default: `Managed by Terraform`.
807
+ *
808
+ * * `productKey` - (Optional) The product key for the virtual machine Windows guest operating system. The default is no key.
809
+ *
810
+ * * `runOnceCommandList` - (Optional) A list of commands to run at first user logon, after guest customization. Each run once command is limited by the API to 260 characters.
811
+ *
812
+ * * `autoLogon` - (Optional) Specifies whether or not the virtual machine automatically logs on as Administrator. Default: `false`.
813
+ *
814
+ * * `autoLogonCount` - (Optional) Specifies how many times the virtual machine should auto-logon the Administrator account when `autoLogon` is `true`. This option should be set accordingly to ensure that all of your commands that run in `runOnceCommandList` can log in to run. Default: `1`.
815
+ *
816
+ * * `timeZone` - (Optional) The time zone for the virtual machine. For a list of supported codes, please refer to the [MIcrosoft documentation][ms-docs-valid-sysprep-tzs]. The default is `85` (GMT/UTC).
817
+ *
818
+ * [ms-docs-valid-sysprep-tzs]: https://msdn.microsoft.com/en-us/library/ms912391(v=winembedded.11).aspx
819
+ *
820
+ * ### Using vApp Properties for OVF/OVA Configuration
821
+ *
822
+ * You can use the `properties` section of the `vapp` block to supply configuration parameters to a virtual machine cloned from a template that originated from an imported OVF/OVA file. Both GuestInfo and ISO transport methods are supported.
823
+ *
824
+ * For templates that use ISO transport, a CD-ROM backed by a client device must be included.
825
+ *
826
+ * **Example**:
827
+ *
828
+ * ```typescript
829
+ * import * as pulumi from "@pulumi/pulumi";
830
+ * import * as vsphere from "@pulumi/vsphere";
831
+ *
832
+ * const vm = new vsphere.VirtualMachine("vm", {
833
+ * clone: {
834
+ * templateUuid: templateFromOvf.id,
835
+ * },
836
+ * cdroms: [{
837
+ * clientDevice: true,
838
+ * }],
839
+ * vapp: {
840
+ * properties: {
841
+ * [terraform.id]: "foo",
842
+ * },
843
+ * },
844
+ * });
845
+ * ```
846
+ *
847
+ * See the section on CD-ROM options for more information.
848
+ *
849
+ * > **NOTE:** The only supported usage path for vApp properties is for existing user-configurable keys. These generally come from an existing template created by importing an OVF or OVA file. You cannot set values for vApp properties on virtual machines created from scratch, virtual machines lacking a vApp configuration, or on property keys that do not exist.
850
+ *
851
+ * **Example**:
852
+ *
853
+ * ```typescript
854
+ * import * as pulumi from "@pulumi/pulumi";
855
+ * import * as vsphere from "@pulumi/vsphere";
856
+ *
857
+ * const vm = new vsphere.VirtualMachine("vm", {
858
+ * clone: {
859
+ * templateUuid: templateFromOvf.id,
860
+ * },
861
+ * vapp: {
862
+ * properties: {
863
+ * [terraform.id]: "foo",
864
+ * },
865
+ * },
866
+ * });
867
+ * ```
868
+ *
869
+ * The vApp Properties for some OVF/OVA may require boolean values.
870
+ *
871
+ * In Terraform a boolean is defined as `bool` with a value of either `true` or `false`.
872
+ *
873
+ * **Example**: A boolean variable type for the Terraform provider configuration.
874
+ *
875
+ * ```typescript
876
+ * import * as pulumi from "@pulumi/pulumi";
877
+ *
878
+ * const config = new pulumi.Config();
879
+ * // Allow insecure connections. Set to `true` for self-signed certificates.
880
+ * const vsphereInsecure = config.getBoolean("vsphereInsecure") || false;
881
+ * ```
882
+ *
883
+ * However, for OVF properties, even though the type is boolean, the vApp Options in vSphere only accepts the values of `"True"` or `"False"`.
884
+ *
885
+ * In these instances, it is recommended to define the variable as a string and pass the value in title case.
886
+ *
887
+ * **Example**: A string variable for to pass to an OVF/OVA boolean OVF property.
888
+ *
889
+ * ```typescript
890
+ * import * as pulumi from "@pulumi/pulumi";
891
+ * import * as vsphere from "@pulumi/vsphere";
892
+ *
893
+ * const config = new pulumi.Config();
894
+ * // Enable SSH on the virtual appliance. One of `True` or `False`.
895
+ * const sshEnabled = config.get("sshEnabled") || "False";
896
+ * const vm = new vsphere.VirtualMachine("vm", {vapp: {
897
+ * properties: {
898
+ * ssh_enabled: sshEnabled,
899
+ * },
900
+ * }});
901
+ * ```
902
+ *
903
+ * ### Additional Requirements for Cloning
904
+ *
905
+ * When cloning from a template, there are additional requirements in both the resource configuration and source template:
906
+ *
907
+ * * The virtual machine must not be powered on at the time of cloning.
908
+ * * All disks on the virtual machine must be SCSI disks.
909
+ * * You must specify at least the same number of `disk` devices as there are disks that exist in the template. These devices are ordered and lined up by the `unitNumber` attribute. Additional disks can be added past this.
910
+ * * The `size` of a virtual disk must be at least the same size as its counterpart disk in the source template.
911
+ * * When using `linkedClone`, the `size`, `thinProvisioned`, and `eagerlyScrub` settings for each disk must be an exact match to the individual disk's counterpart in the source template.
912
+ * * The storage controller count settings should be configured as necessary to cover all of the disks on the template. For best results, only configure this setting for the number of controllers you will need to cover your disk quantity and bandwidth needs, and configure your template accordingly. For most workloads, this setting should be kept at the default of `1` SCSI controller, and all disks in the template should reside on the single, primary controller.
913
+ * * Some operating systems do not respond well to a change in disk controller type. Ensure that `scsiType` is set to an exact match of the template's controller set. For maximum compatibility, make sure the SCSI controllers on the source template are all the same type.
914
+ *
915
+ * You can use the [`vsphere.VirtualMachine`][tf-vsphere-virtual-machine-ds] data source, which provides disk attributes, network interface types, SCSI bus types, and the guest ID of the source template, to return this information. See the section on cloning and customization for more information.
916
+ *
917
+ * ## Trusted Platform Module
918
+ *
919
+ * When creating a virtual machine or cloning one from a template, you have the option to add a virtual Trusted Platform Module device. Refer to the requirements in the VMware vSphere [product documentation](https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-virtual-machine-administration-guide-8-0/configuring-virtual-machine-hardwarevsphere-vm-admin/securing-virtual-machines-with-virtual-trusted-platform-modulevsphere-vm-admin/vtpm-overviewvsphere-vm-admin.html).
920
+ *
921
+ * **Example**:
922
+ *
923
+ * ```typescript
924
+ * import * as pulumi from "@pulumi/pulumi";
925
+ * import * as vsphere from "@pulumi/vsphere";
926
+ *
927
+ * const vm = new vsphere.VirtualMachine("vm", {vtpm: {
928
+ * version: "2.0",
929
+ * }});
930
+ * ```
931
+ *
932
+ * > **NOTE:** Supported versions include 1.2 or 2.0.
933
+ *
934
+ * ## Virtual Machine Migration
935
+ *
936
+ * The `vsphere.VirtualMachine` resource supports live migration both on the host and storage level. You can migrate the virtual machine to another host, cluster, resource pool, or datastore. You can also migrate or pin a virtual disk to a specific datastore.
937
+ *
938
+ * ### Host, Cluster, and Resource Pool Migration
939
+ *
940
+ * To migrate the virtual machine to another host or resource pool, change the `hostSystemId` or `resourcePoolId` to the managed object IDs of the new host or resource pool. To change the virtual machine's cluster or standalone host, select a resource pool within the specific target.
941
+ *
942
+ * The same rules apply for migration as they do for virtual machine creation - any host specified must contribute the resource pool supplied. When moving a virtual machine to a resource pool in another cluster (or standalone host), ensure that all hosts in the cluster (or the single standalone host) have access to the datastore on which the virtual machine is placed.
943
+ *
944
+ * ### Storage Migration
945
+ *
946
+ * Storage migration can be done on two levels:
947
+ *
948
+ * * Global datastore migration can be handled by changing the global `datastoreId` attribute. This triggers a storage migration for all disks that do not have an explicit `datastoreId` specified.
949
+ * * When using Storage DRS through the `datastoreClusterId` attribute, the entire virtual machine can be migrated from one datastore cluster to another by changing the value of this setting. In addition, when `datastoreClusterId` is in use, any disks that drift to datastores outside of the datastore cluster via such actions as manual modification will be migrated back to the datastore cluster on the next apply.
950
+ * * An individual `disk` device can be migrated by manually specifying the `datastoreId` in its configuration block. This also pins it to the specific datastore that is specified - if at a later time the virtual machine and any unpinned disks migrate to another host, the disk will stay on the specified datastore.
951
+ *
952
+ * An example of datastore pinning is below. As long as the datastore in the `pinnedDatastore` data source does not change, any change to the standard `vmDatastore` data source will not affect the data disk - the disk will stay where it is.
953
+ *
954
+ * **Example**:
955
+ *
956
+ * ```typescript
957
+ * import * as pulumi from "@pulumi/pulumi";
958
+ * import * as vsphere from "@pulumi/vsphere";
959
+ *
960
+ * const vm = new vsphere.VirtualMachine("vm", {
961
+ * datastoreId: vmDatastore.id,
962
+ * disks: [
963
+ * {
964
+ * label: "Hard Disk 1",
965
+ * size: 10,
966
+ * },
967
+ * {
968
+ * datastoreId: pinnedDatastore.id,
969
+ * label: "Hard Disk 2",
970
+ * size: 100,
971
+ * unitNumber: 1,
972
+ * },
973
+ * ],
974
+ * });
975
+ * ```
976
+ *
977
+ * #### Storage Migration Restrictions
978
+ *
979
+ * You cannot migrate external disks added with the `attach` parameter. Typically, these disks are created and assigned to a datastore outside the scope of the `vsphere.VirtualMachine` resource. For example, using the [`vsphere.VirtualDisk`][tf-vsphere-virtual-disk] resource, management of the disks would render their configuration unstable.
980
+ *
981
+ * [tf-vsphere-virtual-disk]: /docs/providers/vsphere/r/virtual_disk.html
982
+ *
983
+ * ## Virtual Machine Reboot
984
+ *
985
+ * The virtual machine will be rebooted if any of the following parameters are changed:
986
+ *
987
+ * * `alternateGuestName`
988
+ * * `cpuHotAddEnabled`
989
+ * * `cpuHotRemoveEnabled`
990
+ * * `cpuPerformanceCountersEnabled`
991
+ * * `disk.controller_type`
992
+ * * `disk.unit_number`
993
+ * * `disk.disk_mode`
994
+ * * `disk.write_through`
995
+ * * `disk.disk_sharing`
996
+ * * `efiSecureBootEnabled`
997
+ * * `eptRviMode`
998
+ * * `enableDiskUuid`
999
+ * * `enableLogging`
1000
+ * * `extraConfig`
1001
+ * * `firmware`
1002
+ * * `guestId`
1003
+ * * `hardwareVersion`
1004
+ * * `hvMode`
1005
+ * * `memory` - When reducing the memory size, or when increasing the memory size and `memoryHotAddEnabled` is set to `false`
1006
+ * * `memoryHotAddEnabled`
1007
+ * * `nestedHvEnabled`
1008
+ * * `networkInterface` - When deleting a network interface and VMware Tools is not running.
1009
+ * * `network_interface.adapter_type` - When VMware Tools is not running.
1010
+ * * `numCoresPerSocket`
1011
+ * * `pciDeviceId`
1012
+ * * `runToolsScriptsAfterPowerOn`
1013
+ * * `runToolsScriptsAfterResume`
1014
+ * * `runToolsScriptsBeforeGuestStandby`
1015
+ * * `runToolsScriptsBeforeGuestShutdown`
1016
+ * * `runToolsScriptsBeforeGuestReboot`
1017
+ * * `swapPlacementPolicy`
1018
+ * * `toolsUpgradePolicy`
1019
+ * * `vbsEnabled`
1020
+ * * `vvtdEnabled`
1021
+ * * `vtpm`
1022
+ *
1023
+ * ## Migrating from a Previous Version of the Resource
1024
+ *
1025
+ * > **NOTE:** This section only applies this resource available in v0.4.2 or earlier of this provider.
1026
+ *
1027
+ * The path for migrating to the current version of this resource is very similar to the import path; however, with the exception that the `pulumi import` command does not need to be run. See that section for details on what is required before you run `pulumi preview` on a provider resource that must be migrated.
1028
+ *
1029
+ * A successful migration usually only results in a configuration-only diff - that is, Terraform reconciles the configuration settings that can not be set during the migration process with he Terraform state. In this event, no reconfiguration operations are sent to vSphere during the next `pulumi up`. For more information, see the importing section.
1030
+ *
5
1031
  * ## Import
6
1032
  *
1033
+ * An existing virtual machine can be imported into the Terraform state by providing the full path to the virtual machine.
1034
+ *
1035
+ * [docs-import]: /docs/import/index.html
1036
+ *
1037
+ * **Examples**:
1038
+ *
1039
+ * Import a virtual machine resource named `foo` located in the `dc-01` datacenter.
1040
+ *
1041
+ * ```sh
1042
+ * $ pulumi import vsphere:index/virtualMachine:VirtualMachine vm /dc-01/vm/foo
1043
+ * ```
1044
+ *
1045
+ * > **NOTE:** The `vm` portion of the path is required by vSphere. If the virtual machine is located in a folder, the folder path needs to be included. This is because vSphere organizes virtual machines within a datacenter under the `vm` folder, and any additional folders created within the `vm` folder must be included in the path.
1046
+ *
1047
+ * If the virtual machine `foo` is in a folder named `bar`, the import command would be:
1048
+ *
1049
+ * ```sh
1050
+ * $ pulumi import vsphere:index/virtualMachine:VirtualMachine vm /dc-01/vm/bar/foo
1051
+ * ```
1052
+ *
7
1053
  * ### Additional Importing Requirements
8
1054
  *
9
- * Many of the requirements for [cloning](#additional-requirements-and-notes-for-cloning) apply to importing. Although importing writes directly to the Terraform state, some rules can not be enforced during import time, so every effort should be made to ensure the correctness of the configuration before the import.
1055
+ * Many of the requirements for cloning apply to importing. Although importing writes directly to the Terraform state, some rules can not be enforced during import time, so every effort should be made to ensure the correctness of the configuration before the import.
10
1056
  *
11
1057
  * The following requirements apply to import:
12
1058
  *
13
- * * The disks must have a [`label`](#label) argument assigned in a convention matching `Hard Disk`, starting with disk number 0, based on each virtual disk order on the SCSI bus. As an example, a disk on SCSI controller `0` with a unit number of `0` would be labeled as `Hard Disk 0`, a disk on the same controller with a unit number of `1` would be `Hard Disk 1`, but the next disk, which is on SCSI controller `1` with a unit number of `0`, still becomes `Hard Disk 2`.
1059
+ * * The disks must have a `label` argument assigned in a convention matching `Hard Disk`, starting with disk number 0, based on each virtual disk order on the SCSI bus. As an example, a disk on SCSI controller `0` with a unit number of `0` would be labeled as `Hard Disk 0`, a disk on the same controller with a unit number of `1` would be `Hard Disk 1`, but the next disk, which is on SCSI controller `1` with a unit number of `0`, still becomes `Hard Disk 2`.
14
1060
  *
15
- * * Disks are always imported with [`keep_on_remove`](#keep_on_remove) enabled until the first `pulumi up` run which will remove the setting for known disks. This process safeguards against naming or accounting mistakes in the disk configuration.
1061
+ * > **NOTE:** Any custom `label` set at deployment of machine through Terraform, on import will not have the custom `label` and will default to `Hard Disk _x_`.
1062
+ *
1063
+ * * Disks are always imported with `keepOnRemove` enabled until the first `pulumi up` run which will remove the setting for known disks. This process safeguards against naming or accounting mistakes in the disk configuration.
16
1064
  *
17
1065
  * * The storage controller count for the resource is set to the number of contiguous storage controllers found, starting with the controller at SCSI bus number `0`. If no storage controllers are discovered, the virtual machine is not eligible for import. For maximum compatibility, ensure that the virtual machine has the exact number of storage controllers needed and set the storage controller count accordingly.
18
1066
  *
19
1067
  * After importing, you should run `pulumi preview`. Unless you have changed anything else in the configuration that would cause other attributes to change. The only difference should be configuration-only changes, which are typically comprised of:
20
1068
  *
21
- * * The [`imported`](#imported) flag will transition from `true` to `false`.
1069
+ * * The `imported` flag will transition from `true` to `false`.
1070
+ *
1071
+ * * The `keepOnRemove` of known disks will transition from `true` to `false`.
22
1072
  *
23
- * * The [`keep_on_remove`](#keep_on_remove) of known disks will transition from `true` to `false`.
1073
+ * * Configuration supplied in the `clone` block, if present, will be persisted to state. This initial persistence operation does not perform any cloning or customization actions, nor does it force a new resource. After the first apply operation, further changes to `clone` will force the creation of a new resource.
24
1074
  *
25
- * * Configuration supplied in the [`clone`](#clone) block, if present, will be persisted to state. This initial persistence operation does not perform any cloning or customization actions, nor does it force a new resource. After the first apply operation, further changes to `clone` will force the creation of a new resource.
1075
+ * > **NOTE:** Do not make any configuration changes to `clone` after importing or upgrading from a legacy version of the provider before doing an initial `pulumi up` as these changes will not correctly force a new resource and your changes will have persisted to state, preventing further plans from correctly triggering a diff.
26
1076
  *
27
1077
  * These changes only update Terraform state when applied. Hence, it is safe to run when the virtual machine is running. If more settings are modified, you may need to plan maintenance accordingly for any necessary virtual machine re-configurations.
28
1078
  */
@@ -121,7 +1171,7 @@ export declare class VirtualMachine extends pulumi.CustomResource {
121
1171
  */
122
1172
  readonly datastoreId: pulumi.Output<string>;
123
1173
  /**
124
- * The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
1174
+ * The IP address selected by Terraform to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
125
1175
  */
126
1176
  readonly defaultIpAddress: pulumi.Output<string>;
127
1177
  /**
@@ -186,6 +1236,9 @@ export declare class VirtualMachine extends pulumi.CustomResource {
186
1236
  * The (non-nested) hardware virtualization setting for this virtual machine. Can be one of hvAuto, hvOn, or hvOff.
187
1237
  */
188
1238
  readonly hvMode: pulumi.Output<string>;
1239
+ /**
1240
+ * The number of IDE controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1241
+ */
189
1242
  readonly ideControllerCount: pulumi.Output<number | undefined>;
190
1243
  /**
191
1244
  * List of IP addresses and CIDR networks to ignore while waiting for an IP
@@ -232,7 +1285,7 @@ export declare class VirtualMachine extends pulumi.CustomResource {
232
1285
  */
233
1286
  readonly migrateWaitTimeout: pulumi.Output<number | undefined>;
234
1287
  /**
235
- * The managed object reference ID of the created virtual machine.
1288
+ * The [managed object reference ID][docs-about-morefs] of the created virtual machine.
236
1289
  */
237
1290
  readonly moid: pulumi.Output<string>;
238
1291
  /**
@@ -255,6 +1308,9 @@ export declare class VirtualMachine extends pulumi.CustomResource {
255
1308
  * The number of virtual processors to assign to this virtual machine.
256
1309
  */
257
1310
  readonly numCpus: pulumi.Output<number | undefined>;
1311
+ /**
1312
+ * The number of NVMe controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1313
+ */
258
1314
  readonly nvmeControllerCount: pulumi.Output<number | undefined>;
259
1315
  /**
260
1316
  * A specification for deploying a virtual machine from ovf/ova template.
@@ -272,6 +1328,9 @@ export declare class VirtualMachine extends pulumi.CustomResource {
272
1328
  * The amount of time, in seconds, that we will be trying to power on a VM
273
1329
  */
274
1330
  readonly poweronTimeout: pulumi.Output<number | undefined>;
1331
+ /**
1332
+ * Value internal to Terraform used to determine if a configuration set change requires a reboot. This value is most useful during an update process and gets reset on refresh.
1333
+ */
275
1334
  readonly rebootRequired: pulumi.Output<boolean>;
276
1335
  /**
277
1336
  * Triggers replacement of resource whenever it changes.
@@ -301,11 +1360,17 @@ export declare class VirtualMachine extends pulumi.CustomResource {
301
1360
  * Enable the run of scripts before guest operating system standby when VMware Tools is installed.
302
1361
  */
303
1362
  readonly runToolsScriptsBeforeGuestStandby: pulumi.Output<boolean | undefined>;
1363
+ /**
1364
+ * The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1365
+ */
304
1366
  readonly sataControllerCount: pulumi.Output<number | undefined>;
305
1367
  /**
306
1368
  * Mode for sharing the SCSI bus. The modes are physicalSharing, virtualSharing, and noSharing.
307
1369
  */
308
1370
  readonly scsiBusSharing: pulumi.Output<string | undefined>;
1371
+ /**
1372
+ * The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1373
+ */
309
1374
  readonly scsiControllerCount: pulumi.Output<number | undefined>;
310
1375
  /**
311
1376
  * The type of SCSI bus this virtual machine will have. Can be one of lsilogic, lsilogic-sas or pvscsi.
@@ -475,7 +1540,7 @@ export interface VirtualMachineState {
475
1540
  */
476
1541
  datastoreId?: pulumi.Input<string>;
477
1542
  /**
478
- * The IP address selected by the provider to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
1543
+ * The IP address selected by Terraform to be used with any provisioners configured on this resource. When possible, this is the first IPv4 address that is reachable through the default gateway configured on the machine, then the first reachable IPv6 address, and then the first general discovered address if neither exists. If VMware Tools is not running on the virtual machine, or if the virtual machine is powered off, this value will be blank.
479
1544
  */
480
1545
  defaultIpAddress?: pulumi.Input<string>;
481
1546
  /**
@@ -540,6 +1605,9 @@ export interface VirtualMachineState {
540
1605
  * The (non-nested) hardware virtualization setting for this virtual machine. Can be one of hvAuto, hvOn, or hvOff.
541
1606
  */
542
1607
  hvMode?: pulumi.Input<string>;
1608
+ /**
1609
+ * The number of IDE controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1610
+ */
543
1611
  ideControllerCount?: pulumi.Input<number>;
544
1612
  /**
545
1613
  * List of IP addresses and CIDR networks to ignore while waiting for an IP
@@ -586,7 +1654,7 @@ export interface VirtualMachineState {
586
1654
  */
587
1655
  migrateWaitTimeout?: pulumi.Input<number>;
588
1656
  /**
589
- * The managed object reference ID of the created virtual machine.
1657
+ * The [managed object reference ID][docs-about-morefs] of the created virtual machine.
590
1658
  */
591
1659
  moid?: pulumi.Input<string>;
592
1660
  /**
@@ -609,6 +1677,9 @@ export interface VirtualMachineState {
609
1677
  * The number of virtual processors to assign to this virtual machine.
610
1678
  */
611
1679
  numCpus?: pulumi.Input<number>;
1680
+ /**
1681
+ * The number of NVMe controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1682
+ */
612
1683
  nvmeControllerCount?: pulumi.Input<number>;
613
1684
  /**
614
1685
  * A specification for deploying a virtual machine from ovf/ova template.
@@ -626,6 +1697,9 @@ export interface VirtualMachineState {
626
1697
  * The amount of time, in seconds, that we will be trying to power on a VM
627
1698
  */
628
1699
  poweronTimeout?: pulumi.Input<number>;
1700
+ /**
1701
+ * Value internal to Terraform used to determine if a configuration set change requires a reboot. This value is most useful during an update process and gets reset on refresh.
1702
+ */
629
1703
  rebootRequired?: pulumi.Input<boolean>;
630
1704
  /**
631
1705
  * Triggers replacement of resource whenever it changes.
@@ -655,11 +1729,17 @@ export interface VirtualMachineState {
655
1729
  * Enable the run of scripts before guest operating system standby when VMware Tools is installed.
656
1730
  */
657
1731
  runToolsScriptsBeforeGuestStandby?: pulumi.Input<boolean>;
1732
+ /**
1733
+ * The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1734
+ */
658
1735
  sataControllerCount?: pulumi.Input<number>;
659
1736
  /**
660
1737
  * Mode for sharing the SCSI bus. The modes are physicalSharing, virtualSharing, and noSharing.
661
1738
  */
662
1739
  scsiBusSharing?: pulumi.Input<string>;
1740
+ /**
1741
+ * The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1742
+ */
663
1743
  scsiControllerCount?: pulumi.Input<number>;
664
1744
  /**
665
1745
  * The type of SCSI bus this virtual machine will have. Can be one of lsilogic, lsilogic-sas or pvscsi.
@@ -874,6 +1954,9 @@ export interface VirtualMachineArgs {
874
1954
  * The (non-nested) hardware virtualization setting for this virtual machine. Can be one of hvAuto, hvOn, or hvOff.
875
1955
  */
876
1956
  hvMode?: pulumi.Input<string>;
1957
+ /**
1958
+ * The number of IDE controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
1959
+ */
877
1960
  ideControllerCount?: pulumi.Input<number>;
878
1961
  /**
879
1962
  * List of IP addresses and CIDR networks to ignore while waiting for an IP
@@ -935,6 +2018,9 @@ export interface VirtualMachineArgs {
935
2018
  * The number of virtual processors to assign to this virtual machine.
936
2019
  */
937
2020
  numCpus?: pulumi.Input<number>;
2021
+ /**
2022
+ * The number of NVMe controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
2023
+ */
938
2024
  nvmeControllerCount?: pulumi.Input<number>;
939
2025
  /**
940
2026
  * A specification for deploying a virtual machine from ovf/ova template.
@@ -976,11 +2062,17 @@ export interface VirtualMachineArgs {
976
2062
  * Enable the run of scripts before guest operating system standby when VMware Tools is installed.
977
2063
  */
978
2064
  runToolsScriptsBeforeGuestStandby?: pulumi.Input<boolean>;
2065
+ /**
2066
+ * The number of SATA controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
2067
+ */
979
2068
  sataControllerCount?: pulumi.Input<number>;
980
2069
  /**
981
2070
  * Mode for sharing the SCSI bus. The modes are physicalSharing, virtualSharing, and noSharing.
982
2071
  */
983
2072
  scsiBusSharing?: pulumi.Input<string>;
2073
+ /**
2074
+ * The number of SCSI controllers that Terraform manages on this virtual machine. This directly affects the amount of disks you can add to the virtual machine and the maximum disk unit number. Note that lowering this value does not remove controllers.
2075
+ */
984
2076
  scsiControllerCount?: pulumi.Input<number>;
985
2077
  /**
986
2078
  * The type of SCSI bus this virtual machine will have. Can be one of lsilogic, lsilogic-sas or pvscsi.