published on Sunday, Apr 5, 2026 by Daniel Muehlbachler-Pietrzykowski
published on Sunday, Apr 5, 2026 by Daniel Muehlbachler-Pietrzykowski
Deprecated: Use
proxmoxve.sdn/zone.Qinqinstead. This resource will be removed in v1.0.
QinQ Zone in Proxmox SDN. QinQ also known as VLAN stacking, that uses multiple layers of VLAN tags for isolation. The QinQ zone defines the outer VLAN tag (the Service VLAN) whereas the inner VLAN tag is defined by the VNet. Your physical network switches must support stacked VLANs for this configuration. Due to the double stacking of tags, you need 4 more bytes for QinQ VLANs. For example, you must reduce the MTU to 1496 if you physical interface MTU is 1500.
Example Usage
import * as pulumi from "@pulumi/pulumi";
import * as proxmoxve from "@muhlba91/pulumi-proxmoxve";
const example = new proxmoxve.sdn.zone.QinqLegacy("example", {
resourceId: "qinq1",
bridge: "vmbr0",
serviceVlan: 100,
serviceVlanProtocol: "802.1ad",
mtu: 1496,
dns: "1.1.1.1",
dnsZone: "example.com",
ipam: "pve",
reverseDns: "1.1.1.1",
});
import pulumi
import pulumi_proxmoxve as proxmoxve
example = proxmoxve.sdn.zone.QinqLegacy("example",
resource_id="qinq1",
bridge="vmbr0",
service_vlan=100,
service_vlan_protocol="802.1ad",
mtu=1496,
dns="1.1.1.1",
dns_zone="example.com",
ipam="pve",
reverse_dns="1.1.1.1")
package main
import (
"github.com/muhlba91/pulumi-proxmoxve/sdk/v8/go/proxmoxve/sdn"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
_, err := sdn.NewQinqLegacy(ctx, "example", &sdn.QinqLegacyArgs{
ResourceId: pulumi.String("qinq1"),
Bridge: pulumi.String("vmbr0"),
ServiceVlan: pulumi.Int(100),
ServiceVlanProtocol: pulumi.String("802.1ad"),
Mtu: pulumi.Int(1496),
Dns: pulumi.String("1.1.1.1"),
DnsZone: pulumi.String("example.com"),
Ipam: pulumi.String("pve"),
ReverseDns: pulumi.String("1.1.1.1"),
})
if err != nil {
return err
}
return nil
})
}
using System.Collections.Generic;
using System.Linq;
using Pulumi;
using ProxmoxVE = Pulumi.ProxmoxVE;
return await Deployment.RunAsync(() =>
{
var example = new ProxmoxVE.Sdn.Zone.QinqLegacy("example", new()
{
ResourceId = "qinq1",
Bridge = "vmbr0",
ServiceVlan = %!v(PANIC=Format method: fatal: A failure has occurred: unexpected literal type in GenLiteralValueExpression: cty.NumberIntVal(100) (example.pp:3,25-28)),
ServiceVlanProtocol = "802.1ad",
Mtu = %!v(PANIC=Format method: fatal: A failure has occurred: unexpected literal type in GenLiteralValueExpression: cty.NumberIntVal(1496) (example.pp:5,25-29)),
Dns = "1.1.1.1",
DnsZone = "example.com",
Ipam = "pve",
ReverseDns = "1.1.1.1",
});
});
package generated_program;
import com.pulumi.Context;
import com.pulumi.Pulumi;
import com.pulumi.core.Output;
import io.muehlbachler.pulumi.proxmoxve.sdn.QinqLegacy;
import io.muehlbachler.pulumi.proxmoxve.sdn.QinqLegacyArgs;
import java.util.List;
import java.util.ArrayList;
import java.util.Map;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
public class App {
public static void main(String[] args) {
Pulumi.run(App::stack);
}
public static void stack(Context ctx) {
var example = new QinqLegacy("example", QinqLegacyArgs.builder()
.resourceId("qinq1")
.bridge("vmbr0")
.serviceVlan(%!v(PANIC=Format method: fatal: A failure has occurred: unexpected literal type in GenLiteralValueExpression: cty.NumberIntVal(100) (example.pp:3,25-28)))
.serviceVlanProtocol("802.1ad")
.mtu(%!v(PANIC=Format method: fatal: A failure has occurred: unexpected literal type in GenLiteralValueExpression: cty.NumberIntVal(1496) (example.pp:5,25-29)))
.dns("1.1.1.1")
.dnsZone("example.com")
.ipam("pve")
.reverseDns("1.1.1.1")
.build());
}
}
resources:
example:
type: proxmoxve:sdn/zone:QinqLegacy
properties:
resourceId: qinq1
bridge: vmbr0
serviceVlan: 100
serviceVlanProtocol: 802.1ad
mtu: 1496 # Optional attributes
dns: 1.1.1.1
dnsZone: example.com
ipam: pve
reverseDns: 1.1.1.1
Create QinqLegacy Resource
Resources are created with functions called constructors. To learn more about declaring and configuring resources, see Resources.
Constructor syntax
new QinqLegacy(name: string, args: QinqLegacyArgs, opts?: CustomResourceOptions);@overload
def QinqLegacy(resource_name: str,
args: QinqLegacyArgs,
opts: Optional[ResourceOptions] = None)
@overload
def QinqLegacy(resource_name: str,
opts: Optional[ResourceOptions] = None,
bridge: Optional[str] = None,
resource_id: Optional[str] = None,
service_vlan: Optional[int] = None,
dns: Optional[str] = None,
dns_zone: Optional[str] = None,
ipam: Optional[str] = None,
mtu: Optional[int] = None,
nodes: Optional[Sequence[str]] = None,
reverse_dns: Optional[str] = None,
service_vlan_protocol: Optional[str] = None)func NewQinqLegacy(ctx *Context, name string, args QinqLegacyArgs, opts ...ResourceOption) (*QinqLegacy, error)public QinqLegacy(string name, QinqLegacyArgs args, CustomResourceOptions? opts = null)
public QinqLegacy(String name, QinqLegacyArgs args)
public QinqLegacy(String name, QinqLegacyArgs args, CustomResourceOptions options)
type: proxmoxve:sdn/zone/qinqLegacy:QinqLegacy
properties: # The arguments to resource properties.
options: # Bag of options to control resource's behavior.
Parameters
- name string
- The unique name of the resource.
- args QinqLegacyArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- resource_name str
- The unique name of the resource.
- args QinqLegacyArgs
- The arguments to resource properties.
- opts ResourceOptions
- Bag of options to control resource's behavior.
- ctx Context
- Context object for the current deployment.
- name string
- The unique name of the resource.
- args QinqLegacyArgs
- The arguments to resource properties.
- opts ResourceOption
- Bag of options to control resource's behavior.
- name string
- The unique name of the resource.
- args QinqLegacyArgs
- The arguments to resource properties.
- opts CustomResourceOptions
- Bag of options to control resource's behavior.
- name String
- The unique name of the resource.
- args QinqLegacyArgs
- The arguments to resource properties.
- options CustomResourceOptions
- Bag of options to control resource's behavior.
QinqLegacy Resource Properties
To learn more about resource properties and how to use them, see Inputs and Outputs in the Architecture and Concepts docs.
Inputs
In Python, inputs that are objects can be passed either as argument classes or as dictionary literals.
The QinqLegacy resource accepts the following input properties:
- Bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- Resource
Id string - The unique identifier of the SDN zone.
- Service
Vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - Dns string
- DNS API server address.
- Dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - Ipam string
- IP Address Management system.
- Mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- Nodes List<string>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- Reverse
Dns string - Reverse DNS API server address.
- Service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
- Bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- Resource
Id string - The unique identifier of the SDN zone.
- Service
Vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - Dns string
- DNS API server address.
- Dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - Ipam string
- IP Address Management system.
- Mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- Nodes []string
- The Proxmox nodes which the zone and associated VNets should be deployed on
- Reverse
Dns string - Reverse DNS API server address.
- Service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
- bridge String
- A local, VLAN-aware bridge that is already configured on each local node
- resource
Id String - The unique identifier of the SDN zone.
- service
Vlan Integer - Service VLAN tag for QinQ. The tag must be between
1and4094. - dns String
- DNS API server address.
- dns
Zone String - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam String
- IP Address Management system.
- mtu Integer
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes List<String>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- reverse
Dns String - Reverse DNS API server address.
- service
Vlan StringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
- bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- resource
Id string - The unique identifier of the SDN zone.
- service
Vlan number - Service VLAN tag for QinQ. The tag must be between
1and4094. - dns string
- DNS API server address.
- dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam string
- IP Address Management system.
- mtu number
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes string[]
- The Proxmox nodes which the zone and associated VNets should be deployed on
- reverse
Dns string - Reverse DNS API server address.
- service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
- bridge str
- A local, VLAN-aware bridge that is already configured on each local node
- resource_
id str - The unique identifier of the SDN zone.
- service_
vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - dns str
- DNS API server address.
- dns_
zone str - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam str
- IP Address Management system.
- mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes Sequence[str]
- The Proxmox nodes which the zone and associated VNets should be deployed on
- reverse_
dns str - Reverse DNS API server address.
- service_
vlan_ strprotocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
- bridge String
- A local, VLAN-aware bridge that is already configured on each local node
- resource
Id String - The unique identifier of the SDN zone.
- service
Vlan Number - Service VLAN tag for QinQ. The tag must be between
1and4094. - dns String
- DNS API server address.
- dns
Zone String - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam String
- IP Address Management system.
- mtu Number
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes List<String>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- reverse
Dns String - Reverse DNS API server address.
- service
Vlan StringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q.
Outputs
All input properties are implicitly available as output properties. Additionally, the QinqLegacy resource produces the following output properties:
Look up Existing QinqLegacy Resource
Get an existing QinqLegacy resource’s state with the given name, ID, and optional extra properties used to qualify the lookup.
public static get(name: string, id: Input<ID>, state?: QinqLegacyState, opts?: CustomResourceOptions): QinqLegacy@staticmethod
def get(resource_name: str,
id: str,
opts: Optional[ResourceOptions] = None,
bridge: Optional[str] = None,
dns: Optional[str] = None,
dns_zone: Optional[str] = None,
ipam: Optional[str] = None,
mtu: Optional[int] = None,
nodes: Optional[Sequence[str]] = None,
pending: Optional[bool] = None,
resource_id: Optional[str] = None,
reverse_dns: Optional[str] = None,
service_vlan: Optional[int] = None,
service_vlan_protocol: Optional[str] = None,
state: Optional[str] = None) -> QinqLegacyfunc GetQinqLegacy(ctx *Context, name string, id IDInput, state *QinqLegacyState, opts ...ResourceOption) (*QinqLegacy, error)public static QinqLegacy Get(string name, Input<string> id, QinqLegacyState? state, CustomResourceOptions? opts = null)public static QinqLegacy get(String name, Output<String> id, QinqLegacyState state, CustomResourceOptions options)resources: _: type: proxmoxve:sdn/zone/qinqLegacy:QinqLegacy get: id: ${id}- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- resource_name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- name
- The unique name of the resulting resource.
- id
- The unique provider ID of the resource to lookup.
- state
- Any extra arguments used during the lookup.
- opts
- A bag of options that control this resource's behavior.
- Bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- Dns string
- DNS API server address.
- Dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - Ipam string
- IP Address Management system.
- Mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- Nodes List<string>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- Pending bool
- Indicates if the zone has pending configuration changes that need to be applied.
- Resource
Id string - The unique identifier of the SDN zone.
- Reverse
Dns string - Reverse DNS API server address.
- Service
Vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - Service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - State string
- Indicates the current state of the zone.
- Bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- Dns string
- DNS API server address.
- Dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - Ipam string
- IP Address Management system.
- Mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- Nodes []string
- The Proxmox nodes which the zone and associated VNets should be deployed on
- Pending bool
- Indicates if the zone has pending configuration changes that need to be applied.
- Resource
Id string - The unique identifier of the SDN zone.
- Reverse
Dns string - Reverse DNS API server address.
- Service
Vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - Service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - State string
- Indicates the current state of the zone.
- bridge String
- A local, VLAN-aware bridge that is already configured on each local node
- dns String
- DNS API server address.
- dns
Zone String - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam String
- IP Address Management system.
- mtu Integer
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes List<String>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- pending Boolean
- Indicates if the zone has pending configuration changes that need to be applied.
- resource
Id String - The unique identifier of the SDN zone.
- reverse
Dns String - Reverse DNS API server address.
- service
Vlan Integer - Service VLAN tag for QinQ. The tag must be between
1and4094. - service
Vlan StringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - state String
- Indicates the current state of the zone.
- bridge string
- A local, VLAN-aware bridge that is already configured on each local node
- dns string
- DNS API server address.
- dns
Zone string - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam string
- IP Address Management system.
- mtu number
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes string[]
- The Proxmox nodes which the zone and associated VNets should be deployed on
- pending boolean
- Indicates if the zone has pending configuration changes that need to be applied.
- resource
Id string - The unique identifier of the SDN zone.
- reverse
Dns string - Reverse DNS API server address.
- service
Vlan number - Service VLAN tag for QinQ. The tag must be between
1and4094. - service
Vlan stringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - state string
- Indicates the current state of the zone.
- bridge str
- A local, VLAN-aware bridge that is already configured on each local node
- dns str
- DNS API server address.
- dns_
zone str - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam str
- IP Address Management system.
- mtu int
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes Sequence[str]
- The Proxmox nodes which the zone and associated VNets should be deployed on
- pending bool
- Indicates if the zone has pending configuration changes that need to be applied.
- resource_
id str - The unique identifier of the SDN zone.
- reverse_
dns str - Reverse DNS API server address.
- service_
vlan int - Service VLAN tag for QinQ. The tag must be between
1and4094. - service_
vlan_ strprotocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - state str
- Indicates the current state of the zone.
- bridge String
- A local, VLAN-aware bridge that is already configured on each local node
- dns String
- DNS API server address.
- dns
Zone String - DNS domain name. Used to register hostnames, such as
<hostname>.<domain>. The DNS zone must already exist on the DNS server. - ipam String
- IP Address Management system.
- mtu Number
- MTU value for the zone. There is no support to reset this value back to PVE default once set due to API limitation.
- nodes List<String>
- The Proxmox nodes which the zone and associated VNets should be deployed on
- pending Boolean
- Indicates if the zone has pending configuration changes that need to be applied.
- resource
Id String - The unique identifier of the SDN zone.
- reverse
Dns String - Reverse DNS API server address.
- service
Vlan Number - Service VLAN tag for QinQ. The tag must be between
1and4094. - service
Vlan StringProtocol - Service VLAN protocol for QinQ. The protocol must be
802.1ador802.1q. - state String
- Indicates the current state of the zone.
Import
!/usr/bin/env sh QinQ SDN zone can be imported using its unique identifier (zone ID)
$ pulumi import proxmoxve:sdn/zone/qinqLegacy:QinqLegacy example qinq1
To learn more about importing existing cloud resources, see Importing resources.
Package Details
- Repository
- proxmoxve muhlba91/pulumi-proxmoxve
- License
- Apache-2.0
- Notes
- This Pulumi package is based on the
proxmoxTerraform Provider.
published on Sunday, Apr 5, 2026 by Daniel Muehlbachler-Pietrzykowski
