@pulumi/vsphere
Version:
A Pulumi package for creating vsphere resources
373 lines • 21.4 kB
JavaScript
;
// *** WARNING: this file was generated by pulumi-language-nodejs. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
Object.defineProperty(exports, "__esModule", { value: true });
exports.DistributedVirtualSwitch = void 0;
const pulumi = require("@pulumi/pulumi");
const utilities = require("./utilities");
/**
* The `vsphere.DistributedVirtualSwitch` resource can be used to manage vSphere
* Distributed Switches (VDS).
*
* An essential component of a distributed, scalable vSphere infrastructure, the
* VDS provides centralized management and monitoring of the networking
* configuration for all the hosts that are associated with the switch.
* In addition to adding distributed port groups
* (see the `vsphere.DistributedPortGroup` resource)
* that can be used as networks for virtual machines, a VDS can be configured to
* perform advanced high availability, traffic shaping, network monitoring, etc.
*
* For an overview on vSphere networking concepts, see
* [this page][ref-vsphere-net-concepts].
*
* For more information on the VDS, see [this page][ref-vsphere-vds].
*
* [ref-vsphere-net-concepts]: https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-networking-8-0/basic-networking-with-vnetwork-distributed-switches/dvport-groups.html
* [ref-vsphere-vds]: https://techdocs.broadcom.com/us/en/vmware-cis/vsphere/vsphere/8-0/vsphere-networking-8-0/basic-networking-with-vnetwork-distributed-switches.html
*
* > **NOTE:** This resource requires vCenter and is not available on
* direct ESXi host connections.
*
* ## Example Usage
*
* The following example below demonstrates a "standard" example of configuring a
* VDS in a 3-node vSphere datacenter named `dc1`, across 4 NICs with two being
* used as active, and two being used as passive. Note that the NIC failover order
* propagates to any port groups configured on this VDS and can be overridden.
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as vsphere from "@pulumi/vsphere";
*
* const config = new pulumi.Config();
* const hosts = config.getObject<any>("hosts") || [
* "esxi-01.example.com",
* "esxi-02.example.com",
* "esxi-03.example.com",
* ];
* const networkInterfaces = config.getObject<any>("networkInterfaces") || [
* "vmnic0",
* "vmnic1",
* "vmnic2",
* "vmnic3",
* ];
* const datacenter = vsphere.getDatacenter({
* name: "dc-01",
* });
* const host = (new Array(hosts.length)).map((_, i) => i).map(__index => (vsphere.getHost({
* name: hosts[__index],
* datacenterId: _arg0_.id,
* })));
* const vds = new vsphere.DistributedVirtualSwitch("vds", {
* name: "vds-01",
* datacenterId: datacenter.then(datacenter => datacenter.id),
* uplinks: [
* "uplink1",
* "uplink2",
* "uplink3",
* "uplink4",
* ],
* activeUplinks: [
* "uplink1",
* "uplink2",
* ],
* standbyUplinks: [
* "uplink3",
* "uplink4",
* ],
* hosts: [
* {
* hostSystemId: host[0].then(host => host.id),
* devices: [networkInterfaces],
* },
* {
* hostSystemId: host[1].then(host => host.id),
* devices: [networkInterfaces],
* },
* {
* hostSystemId: host[2].then(host => host.id),
* devices: [networkInterfaces],
* },
* ],
* });
* ```
*
* ### Uplink name and count control
*
* The following abridged example below demonstrates how you can manage the number
* of uplinks, and the name of the uplinks via the `uplinks` parameter.
*
* Note that if you change the uplink naming and count after creating the VDS, you
* may need to explicitly specify `activeUplinks` and `standbyUplinks` as these
* values are saved to state after creation, regardless of being
* specified in config, and will drift if not modified, causing errors.
*
* ```typescript
* import * as pulumi from "@pulumi/pulumi";
* import * as vsphere from "@pulumi/vsphere";
*
* const vds = new vsphere.DistributedVirtualSwitch("vds", {
* name: "vds-01",
* datacenterId: datacenter.id,
* uplinks: [
* "uplink1",
* "uplink2",
* ],
* activeUplinks: ["uplink1"],
* standbyUplinks: ["uplink2"],
* });
* ```
*
* > **NOTE:** The default uplink names when a VDS is created are `uplink1`
* through to `uplink4`, however this default is not guaranteed to be stable and
* you are encouraged to set your own.
*
* ## Import
*
* An existing VDS can be imported into this resource via the path
*
* to the VDS, via the following command:
*
* [docs-import]: https://developer.hashicorp.com/terraform/cli/import
*
* ```sh
* $ pulumi import vsphere:index/distributedVirtualSwitch:DistributedVirtualSwitch vds /dc-01/network/vds-01
* ```
*
* The above would import the VDS named `vds-01` that is located in the `dc-01`
*
* datacenter.
*/
class DistributedVirtualSwitch extends pulumi.CustomResource {
/**
* Get an existing DistributedVirtualSwitch resource's state with the given name, ID, and optional extra
* properties used to qualify the lookup.
*
* @param name The _unique_ name of the resulting resource.
* @param id The _unique_ provider ID of the resource to lookup.
* @param state Any extra arguments used during the lookup.
* @param opts Optional settings to control the behavior of the CustomResource.
*/
static get(name, id, state, opts) {
return new DistributedVirtualSwitch(name, state, { ...opts, id: id });
}
/**
* Returns true if the given object is an instance of DistributedVirtualSwitch. This is designed to work even
* when multiple copies of the Pulumi SDK have been loaded into the same process.
*/
static isInstance(obj) {
if (obj === undefined || obj === null) {
return false;
}
return obj['__pulumiType'] === DistributedVirtualSwitch.__pulumiType;
}
constructor(name, argsOrState, opts) {
let resourceInputs = {};
opts = opts || {};
if (opts.id) {
const state = argsOrState;
resourceInputs["activeUplinks"] = state?.activeUplinks;
resourceInputs["allowForgedTransmits"] = state?.allowForgedTransmits;
resourceInputs["allowMacChanges"] = state?.allowMacChanges;
resourceInputs["allowPromiscuous"] = state?.allowPromiscuous;
resourceInputs["backupnfcMaximumMbit"] = state?.backupnfcMaximumMbit;
resourceInputs["backupnfcReservationMbit"] = state?.backupnfcReservationMbit;
resourceInputs["backupnfcShareCount"] = state?.backupnfcShareCount;
resourceInputs["backupnfcShareLevel"] = state?.backupnfcShareLevel;
resourceInputs["blockAllPorts"] = state?.blockAllPorts;
resourceInputs["checkBeacon"] = state?.checkBeacon;
resourceInputs["configVersion"] = state?.configVersion;
resourceInputs["contactDetail"] = state?.contactDetail;
resourceInputs["contactName"] = state?.contactName;
resourceInputs["customAttributes"] = state?.customAttributes;
resourceInputs["datacenterId"] = state?.datacenterId;
resourceInputs["description"] = state?.description;
resourceInputs["directpathGen2Allowed"] = state?.directpathGen2Allowed;
resourceInputs["egressShapingAverageBandwidth"] = state?.egressShapingAverageBandwidth;
resourceInputs["egressShapingBurstSize"] = state?.egressShapingBurstSize;
resourceInputs["egressShapingEnabled"] = state?.egressShapingEnabled;
resourceInputs["egressShapingPeakBandwidth"] = state?.egressShapingPeakBandwidth;
resourceInputs["failback"] = state?.failback;
resourceInputs["faulttoleranceMaximumMbit"] = state?.faulttoleranceMaximumMbit;
resourceInputs["faulttoleranceReservationMbit"] = state?.faulttoleranceReservationMbit;
resourceInputs["faulttoleranceShareCount"] = state?.faulttoleranceShareCount;
resourceInputs["faulttoleranceShareLevel"] = state?.faulttoleranceShareLevel;
resourceInputs["folder"] = state?.folder;
resourceInputs["hbrMaximumMbit"] = state?.hbrMaximumMbit;
resourceInputs["hbrReservationMbit"] = state?.hbrReservationMbit;
resourceInputs["hbrShareCount"] = state?.hbrShareCount;
resourceInputs["hbrShareLevel"] = state?.hbrShareLevel;
resourceInputs["hosts"] = state?.hosts;
resourceInputs["ignoreOtherPvlanMappings"] = state?.ignoreOtherPvlanMappings;
resourceInputs["ingressShapingAverageBandwidth"] = state?.ingressShapingAverageBandwidth;
resourceInputs["ingressShapingBurstSize"] = state?.ingressShapingBurstSize;
resourceInputs["ingressShapingEnabled"] = state?.ingressShapingEnabled;
resourceInputs["ingressShapingPeakBandwidth"] = state?.ingressShapingPeakBandwidth;
resourceInputs["ipv4Address"] = state?.ipv4Address;
resourceInputs["iscsiMaximumMbit"] = state?.iscsiMaximumMbit;
resourceInputs["iscsiReservationMbit"] = state?.iscsiReservationMbit;
resourceInputs["iscsiShareCount"] = state?.iscsiShareCount;
resourceInputs["iscsiShareLevel"] = state?.iscsiShareLevel;
resourceInputs["lacpApiVersion"] = state?.lacpApiVersion;
resourceInputs["lacpEnabled"] = state?.lacpEnabled;
resourceInputs["lacpMode"] = state?.lacpMode;
resourceInputs["linkDiscoveryOperation"] = state?.linkDiscoveryOperation;
resourceInputs["linkDiscoveryProtocol"] = state?.linkDiscoveryProtocol;
resourceInputs["managementMaximumMbit"] = state?.managementMaximumMbit;
resourceInputs["managementReservationMbit"] = state?.managementReservationMbit;
resourceInputs["managementShareCount"] = state?.managementShareCount;
resourceInputs["managementShareLevel"] = state?.managementShareLevel;
resourceInputs["maxMtu"] = state?.maxMtu;
resourceInputs["multicastFilteringMode"] = state?.multicastFilteringMode;
resourceInputs["name"] = state?.name;
resourceInputs["netflowActiveFlowTimeout"] = state?.netflowActiveFlowTimeout;
resourceInputs["netflowCollectorIpAddress"] = state?.netflowCollectorIpAddress;
resourceInputs["netflowCollectorPort"] = state?.netflowCollectorPort;
resourceInputs["netflowEnabled"] = state?.netflowEnabled;
resourceInputs["netflowIdleFlowTimeout"] = state?.netflowIdleFlowTimeout;
resourceInputs["netflowInternalFlowsOnly"] = state?.netflowInternalFlowsOnly;
resourceInputs["netflowObservationDomainId"] = state?.netflowObservationDomainId;
resourceInputs["netflowSamplingRate"] = state?.netflowSamplingRate;
resourceInputs["networkResourceControlEnabled"] = state?.networkResourceControlEnabled;
resourceInputs["networkResourceControlVersion"] = state?.networkResourceControlVersion;
resourceInputs["nfsMaximumMbit"] = state?.nfsMaximumMbit;
resourceInputs["nfsReservationMbit"] = state?.nfsReservationMbit;
resourceInputs["nfsShareCount"] = state?.nfsShareCount;
resourceInputs["nfsShareLevel"] = state?.nfsShareLevel;
resourceInputs["notifySwitches"] = state?.notifySwitches;
resourceInputs["portPrivateSecondaryVlanId"] = state?.portPrivateSecondaryVlanId;
resourceInputs["pvlanMappings"] = state?.pvlanMappings;
resourceInputs["standbyUplinks"] = state?.standbyUplinks;
resourceInputs["tags"] = state?.tags;
resourceInputs["teamingPolicy"] = state?.teamingPolicy;
resourceInputs["txUplink"] = state?.txUplink;
resourceInputs["uplinks"] = state?.uplinks;
resourceInputs["vdpMaximumMbit"] = state?.vdpMaximumMbit;
resourceInputs["vdpReservationMbit"] = state?.vdpReservationMbit;
resourceInputs["vdpShareCount"] = state?.vdpShareCount;
resourceInputs["vdpShareLevel"] = state?.vdpShareLevel;
resourceInputs["version"] = state?.version;
resourceInputs["virtualmachineMaximumMbit"] = state?.virtualmachineMaximumMbit;
resourceInputs["virtualmachineReservationMbit"] = state?.virtualmachineReservationMbit;
resourceInputs["virtualmachineShareCount"] = state?.virtualmachineShareCount;
resourceInputs["virtualmachineShareLevel"] = state?.virtualmachineShareLevel;
resourceInputs["vlanId"] = state?.vlanId;
resourceInputs["vlanRanges"] = state?.vlanRanges;
resourceInputs["vmotionMaximumMbit"] = state?.vmotionMaximumMbit;
resourceInputs["vmotionReservationMbit"] = state?.vmotionReservationMbit;
resourceInputs["vmotionShareCount"] = state?.vmotionShareCount;
resourceInputs["vmotionShareLevel"] = state?.vmotionShareLevel;
resourceInputs["vsanMaximumMbit"] = state?.vsanMaximumMbit;
resourceInputs["vsanReservationMbit"] = state?.vsanReservationMbit;
resourceInputs["vsanShareCount"] = state?.vsanShareCount;
resourceInputs["vsanShareLevel"] = state?.vsanShareLevel;
}
else {
const args = argsOrState;
if (args?.datacenterId === undefined && !opts.urn) {
throw new Error("Missing required property 'datacenterId'");
}
resourceInputs["activeUplinks"] = args?.activeUplinks;
resourceInputs["allowForgedTransmits"] = args?.allowForgedTransmits;
resourceInputs["allowMacChanges"] = args?.allowMacChanges;
resourceInputs["allowPromiscuous"] = args?.allowPromiscuous;
resourceInputs["backupnfcMaximumMbit"] = args?.backupnfcMaximumMbit;
resourceInputs["backupnfcReservationMbit"] = args?.backupnfcReservationMbit;
resourceInputs["backupnfcShareCount"] = args?.backupnfcShareCount;
resourceInputs["backupnfcShareLevel"] = args?.backupnfcShareLevel;
resourceInputs["blockAllPorts"] = args?.blockAllPorts;
resourceInputs["checkBeacon"] = args?.checkBeacon;
resourceInputs["contactDetail"] = args?.contactDetail;
resourceInputs["contactName"] = args?.contactName;
resourceInputs["customAttributes"] = args?.customAttributes;
resourceInputs["datacenterId"] = args?.datacenterId;
resourceInputs["description"] = args?.description;
resourceInputs["directpathGen2Allowed"] = args?.directpathGen2Allowed;
resourceInputs["egressShapingAverageBandwidth"] = args?.egressShapingAverageBandwidth;
resourceInputs["egressShapingBurstSize"] = args?.egressShapingBurstSize;
resourceInputs["egressShapingEnabled"] = args?.egressShapingEnabled;
resourceInputs["egressShapingPeakBandwidth"] = args?.egressShapingPeakBandwidth;
resourceInputs["failback"] = args?.failback;
resourceInputs["faulttoleranceMaximumMbit"] = args?.faulttoleranceMaximumMbit;
resourceInputs["faulttoleranceReservationMbit"] = args?.faulttoleranceReservationMbit;
resourceInputs["faulttoleranceShareCount"] = args?.faulttoleranceShareCount;
resourceInputs["faulttoleranceShareLevel"] = args?.faulttoleranceShareLevel;
resourceInputs["folder"] = args?.folder;
resourceInputs["hbrMaximumMbit"] = args?.hbrMaximumMbit;
resourceInputs["hbrReservationMbit"] = args?.hbrReservationMbit;
resourceInputs["hbrShareCount"] = args?.hbrShareCount;
resourceInputs["hbrShareLevel"] = args?.hbrShareLevel;
resourceInputs["hosts"] = args?.hosts;
resourceInputs["ignoreOtherPvlanMappings"] = args?.ignoreOtherPvlanMappings;
resourceInputs["ingressShapingAverageBandwidth"] = args?.ingressShapingAverageBandwidth;
resourceInputs["ingressShapingBurstSize"] = args?.ingressShapingBurstSize;
resourceInputs["ingressShapingEnabled"] = args?.ingressShapingEnabled;
resourceInputs["ingressShapingPeakBandwidth"] = args?.ingressShapingPeakBandwidth;
resourceInputs["ipv4Address"] = args?.ipv4Address;
resourceInputs["iscsiMaximumMbit"] = args?.iscsiMaximumMbit;
resourceInputs["iscsiReservationMbit"] = args?.iscsiReservationMbit;
resourceInputs["iscsiShareCount"] = args?.iscsiShareCount;
resourceInputs["iscsiShareLevel"] = args?.iscsiShareLevel;
resourceInputs["lacpApiVersion"] = args?.lacpApiVersion;
resourceInputs["lacpEnabled"] = args?.lacpEnabled;
resourceInputs["lacpMode"] = args?.lacpMode;
resourceInputs["linkDiscoveryOperation"] = args?.linkDiscoveryOperation;
resourceInputs["linkDiscoveryProtocol"] = args?.linkDiscoveryProtocol;
resourceInputs["managementMaximumMbit"] = args?.managementMaximumMbit;
resourceInputs["managementReservationMbit"] = args?.managementReservationMbit;
resourceInputs["managementShareCount"] = args?.managementShareCount;
resourceInputs["managementShareLevel"] = args?.managementShareLevel;
resourceInputs["maxMtu"] = args?.maxMtu;
resourceInputs["multicastFilteringMode"] = args?.multicastFilteringMode;
resourceInputs["name"] = args?.name;
resourceInputs["netflowActiveFlowTimeout"] = args?.netflowActiveFlowTimeout;
resourceInputs["netflowCollectorIpAddress"] = args?.netflowCollectorIpAddress;
resourceInputs["netflowCollectorPort"] = args?.netflowCollectorPort;
resourceInputs["netflowEnabled"] = args?.netflowEnabled;
resourceInputs["netflowIdleFlowTimeout"] = args?.netflowIdleFlowTimeout;
resourceInputs["netflowInternalFlowsOnly"] = args?.netflowInternalFlowsOnly;
resourceInputs["netflowObservationDomainId"] = args?.netflowObservationDomainId;
resourceInputs["netflowSamplingRate"] = args?.netflowSamplingRate;
resourceInputs["networkResourceControlEnabled"] = args?.networkResourceControlEnabled;
resourceInputs["networkResourceControlVersion"] = args?.networkResourceControlVersion;
resourceInputs["nfsMaximumMbit"] = args?.nfsMaximumMbit;
resourceInputs["nfsReservationMbit"] = args?.nfsReservationMbit;
resourceInputs["nfsShareCount"] = args?.nfsShareCount;
resourceInputs["nfsShareLevel"] = args?.nfsShareLevel;
resourceInputs["notifySwitches"] = args?.notifySwitches;
resourceInputs["portPrivateSecondaryVlanId"] = args?.portPrivateSecondaryVlanId;
resourceInputs["pvlanMappings"] = args?.pvlanMappings;
resourceInputs["standbyUplinks"] = args?.standbyUplinks;
resourceInputs["tags"] = args?.tags;
resourceInputs["teamingPolicy"] = args?.teamingPolicy;
resourceInputs["txUplink"] = args?.txUplink;
resourceInputs["uplinks"] = args?.uplinks;
resourceInputs["vdpMaximumMbit"] = args?.vdpMaximumMbit;
resourceInputs["vdpReservationMbit"] = args?.vdpReservationMbit;
resourceInputs["vdpShareCount"] = args?.vdpShareCount;
resourceInputs["vdpShareLevel"] = args?.vdpShareLevel;
resourceInputs["version"] = args?.version;
resourceInputs["virtualmachineMaximumMbit"] = args?.virtualmachineMaximumMbit;
resourceInputs["virtualmachineReservationMbit"] = args?.virtualmachineReservationMbit;
resourceInputs["virtualmachineShareCount"] = args?.virtualmachineShareCount;
resourceInputs["virtualmachineShareLevel"] = args?.virtualmachineShareLevel;
resourceInputs["vlanId"] = args?.vlanId;
resourceInputs["vlanRanges"] = args?.vlanRanges;
resourceInputs["vmotionMaximumMbit"] = args?.vmotionMaximumMbit;
resourceInputs["vmotionReservationMbit"] = args?.vmotionReservationMbit;
resourceInputs["vmotionShareCount"] = args?.vmotionShareCount;
resourceInputs["vmotionShareLevel"] = args?.vmotionShareLevel;
resourceInputs["vsanMaximumMbit"] = args?.vsanMaximumMbit;
resourceInputs["vsanReservationMbit"] = args?.vsanReservationMbit;
resourceInputs["vsanShareCount"] = args?.vsanShareCount;
resourceInputs["vsanShareLevel"] = args?.vsanShareLevel;
resourceInputs["configVersion"] = undefined /*out*/;
}
opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
super(DistributedVirtualSwitch.__pulumiType, name, resourceInputs, opts);
}
}
exports.DistributedVirtualSwitch = DistributedVirtualSwitch;
/** @internal */
DistributedVirtualSwitch.__pulumiType = 'vsphere:index/distributedVirtualSwitch:DistributedVirtualSwitch';
//# sourceMappingURL=distributedVirtualSwitch.js.map