Broker Listener - Create Or Update
Een BrokerListenerResource maken
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.IoTOperations/instances/{instanceName}/brokers/{brokerName}/listeners/{listenerName}?api-version=2025-04-01
URI-parameters
Name | In | Vereist | Type | Description |
---|---|---|---|---|
broker
|
path | True |
string minLength: 3maxLength: 63 pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$ |
Naam van broker. |
instance
|
path | True |
string minLength: 3maxLength: 63 pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$ |
Naam van exemplaar. |
listener
|
path | True |
string minLength: 3maxLength: 63 pattern: ^[a-z0-9][a-z0-9-]*[a-z0-9]$ |
Naam van exemplaarbroker-listenerresource |
resource
|
path | True |
string minLength: 1maxLength: 90 |
De naam van de resourcegroep. De naam is niet hoofdlettergevoelig. |
subscription
|
path | True |
string (uuid) |
De id van het doelabonnement. De waarde moet een UUID zijn. |
api-version
|
query | True |
string minLength: 1 |
De API-versie die voor deze bewerking moet worden gebruikt. |
Aanvraagbody
Name | Vereist | Type | Description |
---|---|---|---|
extendedLocation | True |
Edge-locatie van de resource. |
|
properties |
De resourcespecifieke eigenschappen voor deze resource. |
Antwoorden
Name | Type | Description |
---|---|---|
200 OK |
De updatebewerking BrokerListenerResource van de resource is voltooid |
|
201 Created |
Het maken van de resource BrokerListenerResource is voltooid Kopteksten
|
|
Other Status Codes |
Een onverwachte foutreactie. |
Beveiliging
azure_auth
Azure Active Directory OAuth2 Flow.
Type:
oauth2
Stroom:
implicit
Autorisatie-URL:
https://login.microsoftonline.com/common/oauth2/authorize
Bereiken
Name | Description |
---|---|
user_impersonation | Uw gebruikersaccount imiteren |
Voorbeelden
Broker |
Broker |
Broker |
BrokerListener_CreateOrUpdate
Voorbeeldaanvraag
PUT https://management.azure.com/subscriptions/F8C729F9-DF9C-4743-848F-96EE433D8E53/resourceGroups/rgiotoperations/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123?api-version=2025-04-01
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"ports": [
{
"authenticationRef": "tjvdroaqqy",
"authorizationRef": "inxhvxnwswyrvt",
"nodePort": 7281,
"port": 1268,
"protocol": "Mqtt",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"duration": "qmpeffoksron",
"secretName": "oagi",
"renewBefore": "hutno",
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"kind": "Issuer",
"name": "ocwoqpgucvjrsuudtjhb"
},
"privateKey": {
"algorithm": "Ec256",
"rotationPolicy": "Always"
},
"san": {
"dns": [
"xhvmhrrhgfsapocjeebqtnzarlj"
],
"ip": [
"zbgugfzcgsmegevzktsnibyuyp"
]
}
},
"manual": {
"secretRef": "secret-name"
}
}
}
],
"serviceType": "ClusterIp"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
}
}
Voorbeeldrespons
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"ports": [
{
"authenticationRef": "tjvdroaqqy",
"authorizationRef": "inxhvxnwswyrvt",
"nodePort": 7281,
"port": 1268,
"protocol": "Mqtt",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"duration": "qmpeffoksron",
"secretName": "oagi",
"renewBefore": "hutno",
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"kind": "Issuer",
"name": "ocwoqpgucvjrsuudtjhb"
},
"privateKey": {
"algorithm": "Ec256",
"rotationPolicy": "Always"
},
"san": {
"dns": [
"xhvmhrrhgfsapocjeebqtnzarlj"
],
"ip": [
"zbgugfzcgsmegevzktsnibyuyp"
]
}
},
"manual": {
"secretRef": "secret-name"
}
}
}
],
"serviceType": "ClusterIp",
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
Azure-AsyncOperation: https://contoso.com/operationstatus
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"ports": [
{
"authenticationRef": "tjvdroaqqy",
"authorizationRef": "inxhvxnwswyrvt",
"nodePort": 7281,
"port": 1268,
"protocol": "Mqtt",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"duration": "qmpeffoksron",
"secretName": "oagi",
"renewBefore": "hutno",
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"kind": "Issuer",
"name": "ocwoqpgucvjrsuudtjhb"
},
"privateKey": {
"algorithm": "Ec256",
"rotationPolicy": "Always"
},
"san": {
"dns": [
"xhvmhrrhgfsapocjeebqtnzarlj"
],
"ip": [
"zbgugfzcgsmegevzktsnibyuyp"
]
}
},
"manual": {
"secretRef": "secret-name"
}
}
}
],
"serviceType": "ClusterIp",
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
BrokerListener_CreateOrUpdate_Complex
Voorbeeldaanvraag
PUT https://management.azure.com/subscriptions/F8C729F9-DF9C-4743-848F-96EE433D8E53/resourceGroups/rgiotoperations/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123?api-version=2025-04-01
{
"properties": {
"serviceType": "LoadBalancer",
"ports": [
{
"port": 8080,
"authenticationRef": "example-authentication",
"protocol": "WebSockets"
},
{
"port": 8443,
"authenticationRef": "example-authentication",
"protocol": "WebSockets",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"name": "example-issuer",
"kind": "Issuer"
}
}
}
},
{
"port": 1883,
"authenticationRef": "example-authentication"
},
{
"port": 8883,
"authenticationRef": "example-authentication",
"tls": {
"mode": "Manual",
"manual": {
"secretRef": "example-secret"
}
}
}
]
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
}
}
Voorbeeldrespons
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"serviceType": "LoadBalancer",
"ports": [
{
"port": 8080,
"authenticationRef": "example-authentication",
"protocol": "WebSockets"
},
{
"port": 8443,
"authenticationRef": "example-authentication",
"protocol": "WebSockets",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"name": "example-issuer",
"kind": "Issuer"
}
}
}
},
{
"port": 1883,
"authenticationRef": "example-authentication"
},
{
"port": 8883,
"authenticationRef": "example-authentication",
"tls": {
"mode": "Manual",
"manual": {
"secretRef": "example-secret"
}
}
}
],
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
Azure-AsyncOperation: https://contoso.com/operationstatus
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"serviceType": "LoadBalancer",
"ports": [
{
"port": 8080,
"authenticationRef": "example-authentication",
"protocol": "WebSockets"
},
{
"port": 8443,
"authenticationRef": "example-authentication",
"protocol": "WebSockets",
"tls": {
"mode": "Automatic",
"certManagerCertificateSpec": {
"issuerRef": {
"group": "jtmuladdkpasfpoyvewekmiy",
"name": "example-issuer",
"kind": "Issuer"
}
}
}
},
{
"port": 1883,
"authenticationRef": "example-authentication"
},
{
"port": 8883,
"authenticationRef": "example-authentication",
"tls": {
"mode": "Manual",
"manual": {
"secretRef": "example-secret"
}
}
}
],
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
BrokerListener_CreateOrUpdate_Simple
Voorbeeldaanvraag
PUT https://management.azure.com/subscriptions/F8C729F9-DF9C-4743-848F-96EE433D8E53/resourceGroups/rgiotoperations/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123?api-version=2025-04-01
{
"properties": {
"ports": [
{
"port": 1883
}
]
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
}
}
Voorbeeldrespons
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"serviceType": "LoadBalancer",
"ports": [
{
"port": 1883
}
],
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
Azure-AsyncOperation: https://contoso.com/operationstatus
{
"properties": {
"serviceName": "tpfiszlapdpxktx",
"serviceType": "LoadBalancer",
"ports": [
{
"port": 1883
}
],
"provisioningState": "Succeeded"
},
"extendedLocation": {
"name": "qmbrfwcpwwhggszhrdjv",
"type": "CustomLocation"
},
"id": "/subscriptions/0000000-0000-0000-0000-000000000000/resourceGroups/resourceGroup123/providers/Microsoft.IoTOperations/instances/resource-name123/brokers/resource-name123/listeners/resource-name123",
"name": "hoqjaachratt",
"type": "hizbknwegcdaeh",
"systemData": {
"createdBy": "ssvaslsmudloholronopqyxjcu",
"createdByType": "User",
"createdAt": "2024-08-09T18:13:29.389Z",
"lastModifiedBy": "gnicpuszwd",
"lastModifiedByType": "User",
"lastModifiedAt": "2024-08-09T18:13:29.389Z"
}
}
Definities
Name | Description |
---|---|
Broker |
Definieert een Broker-listener. Een listener is een verzameling poorten waarop de broker verbindingen van clients accepteert. |
Broker |
Instantiebrokerresource |
Broker |
BrokerProtocoltypen |
Cert |
Automatisch TLS-servercertificaatbeheer met certificaatbeheer |
Cert |
Eigenschappen van CertManagerIssuerKind |
Cert |
eigenschappen van Cert-Manager issuerRef |
Cert |
Eigenschappen van persoonlijke sleutel van Cert Manager |
created |
Het type identiteit waarmee de resource is gemaakt. |
Error |
Aanvullende informatie over de resourcebeheerfout. |
Error |
De foutdetails. |
Error |
Foutreactie |
Extended |
Uitgebreide locatie is een uitbreiding van Azure-locaties. Ze bieden een manier om hun Kubernetes-clusters met Azure ARC te gebruiken als doellocaties voor het implementeren van Azure-servicesexemplaren. |
Extended |
Het enum definieert het type ExtendedLocation dat is geaccepteerd. |
Listener |
Hiermee definieert u een TCP-poort waarop een |
Private |
Typen persoonlijke sleutelalgoritmen. |
Private |
Beleid voor rotatie van persoonlijke sleutels. |
Provisioning |
De opsomming waarin de status van de resource wordt gedefinieerd. |
San |
Alternatieve onderwerpnamen (SAN's) voor certificaat. |
Service |
Kubernetes-servicetypen die worden ondersteund door listener |
system |
Metagegevens met betrekking tot het maken en de laatste wijziging van de resource. |
Tls |
Verzameling van verschillende TLS-typen, NOTE- Enum tegelijk hoeft slechts één van deze te worden ondersteund |
Tls |
Brokerverificatiemodus |
X509Manual |
Eigenschappen van X509-certificaatverificatie. |
BrokerListenerProperties
Definieert een Broker-listener. Een listener is een verzameling poorten waarop de broker verbindingen van clients accepteert.
Name | Type | Default value | Description |
---|---|---|---|
ports |
Poorten waarop deze listener clientverbindingen accepteert. |
||
provisioningState |
De status van de laatste bewerking. |
||
serviceName |
string |
Kubernetes Service-naam van deze listener. |
|
serviceType | ClusterIp |
Kubernetes Service-type van deze listener. |
BrokerListenerResource
Instantiebrokerresource
Name | Type | Description |
---|---|---|
extendedLocation |
Edge-locatie van de resource. |
|
id |
string (arm-id) |
Volledig gekwalificeerde resource-id voor de resource. Bijvoorbeeld /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceType}/{resourceName}" |
name |
string |
De naam van de resource |
properties |
De resourcespecifieke eigenschappen voor deze resource. |
|
systemData |
Azure Resource Manager-metagegevens met createdBy- en modifiedBy-gegevens. |
|
type |
string |
Het type resource. Bijvoorbeeld 'Microsoft.Compute/virtualMachines' of 'Microsoft.Storage/storageAccounts' |
BrokerProtocolType
BrokerProtocoltypen
Waarde | Description |
---|---|
Mqtt |
protocolbroker |
WebSockets |
protocol websocket |
CertManagerCertificateSpec
Automatisch TLS-servercertificaatbeheer met certificaatbeheer
Name | Type | Description |
---|---|---|
duration |
string |
Levensduur van het certificaat. Moet worden opgegeven met een Go-tijd. Duurnotatie (h|m|s). Bijvoorbeeld 240 uur gedurende 240 uur en 45m gedurende 45 minuten. |
issuerRef |
cert-manager issuerRef. |
|
privateKey |
Het type persoonlijke sleutel van het certificaat. |
|
renewBefore |
string |
Wanneer moet u het certificaat vernieuwen. Moet worden opgegeven met een Go-tijd. Duurnotatie (h|m|s). Bijvoorbeeld 240 uur gedurende 240 uur en 45m gedurende 45 minuten. |
san |
Aanvullende alternatieve onderwerpnamen (SAN's) die u in het certificaat wilt opnemen. |
|
secretName |
string |
Geheim voor het opslaan van servercertificaat. Alle bestaande gegevens worden overschreven. Dit is een verwijzing naar het geheim via een identificatienaam, niet het geheim zelf. |
CertManagerIssuerKind
Eigenschappen van CertManagerIssuerKind
Waarde | Description |
---|---|
ClusterIssuer |
ClusterIssuer-soort. |
Issuer |
Soort verlener. |
CertManagerIssuerRef
eigenschappen van Cert-Manager issuerRef
Name | Type | Default value | Description |
---|---|---|---|
group |
string |
cert-manager.io |
groep van verlener. |
kind |
soort verlener (Verlener of ClusterIssuer). |
||
name |
string |
naam van verlener. |
CertManagerPrivateKey
Eigenschappen van persoonlijke sleutel van Cert Manager
Name | Type | Description |
---|---|---|
algorithm |
algoritme voor persoonlijke sleutel. |
|
rotationPolicy |
cert-manager private key rotationPolicy. |
createdByType
Het type identiteit waarmee de resource is gemaakt.
Waarde | Description |
---|---|
Application | |
Key | |
ManagedIdentity | |
User |
ErrorAdditionalInfo
Aanvullende informatie over de resourcebeheerfout.
Name | Type | Description |
---|---|---|
info |
object |
De aanvullende informatie. |
type |
string |
Het extra informatietype. |
ErrorDetail
De foutdetails.
Name | Type | Description |
---|---|---|
additionalInfo |
De fout bevat aanvullende informatie. |
|
code |
string |
De foutcode. |
details |
De foutdetails. |
|
message |
string |
Het foutbericht. |
target |
string |
Het foutdoel. |
ErrorResponse
Foutreactie
Name | Type | Description |
---|---|---|
error |
Het foutobject. |
ExtendedLocation
Uitgebreide locatie is een uitbreiding van Azure-locaties. Ze bieden een manier om hun Kubernetes-clusters met Azure ARC te gebruiken als doellocaties voor het implementeren van Azure-servicesexemplaren.
Name | Type | Description |
---|---|---|
name |
string |
De naam van de uitgebreide locatie. |
type |
Type of ExtendedLocation. |
ExtendedLocationType
Het enum definieert het type ExtendedLocation dat is geaccepteerd.
Waarde | Description |
---|---|
CustomLocation |
CustomLocation-type |
ListenerPort
Hiermee definieert u een TCP-poort waarop een BrokerListener
luistert.
Name | Type | Default value | Description |
---|---|---|---|
authenticationRef |
string |
Verwijzing naar clientverificatie-instellingen. Weglaten om verificatie uit te schakelen. |
|
authorizationRef |
string |
Verwijzing naar instellingen voor clientautorisatie. Weglaten om autorisatie uit te schakelen. |
|
nodePort |
integer (int32) minimum: 0maximum: 65535 |
Kubernetes-knooppuntpoort. Alleen relevant wanneer deze poort is gekoppeld aan een |
|
port |
integer (int32) minimum: 0maximum: 65535 |
TCP-poort voor het accepteren van clientverbindingen. |
|
protocol | Mqtt |
Protocol dat moet worden gebruikt voor clientverbindingen. |
|
tls |
Tls-servercertificaatinstellingen voor deze poort. Laat weg om TLS uit te schakelen. |
PrivateKeyAlgorithm
Typen persoonlijke sleutelalgoritmen.
Waarde | Description |
---|---|
Ec256 |
Algoritme - ec256. |
Ec384 |
Algoritme - ec384. |
Ec521 |
Algoritme - ec521. |
Ed25519 |
Algoritme - ed25519. |
Rsa2048 |
Algoritme - rsa2048. |
Rsa4096 |
Algoritme - rsa4096. |
Rsa8192 |
Algoritme - rsa8192. |
PrivateKeyRotationPolicy
Beleid voor rotatie van persoonlijke sleutels.
Waarde | Description |
---|---|
Always |
Rotatiebeleid - altijd. |
Never |
Rotatiebeleid - Nooit. |
ProvisioningState
De opsomming waarin de status van de resource wordt gedefinieerd.
Waarde | Description |
---|---|
Accepted |
De resource is geaccepteerd. |
Canceled |
Het maken van resources is geannuleerd. |
Deleting |
Resource wordt verwijderd. |
Failed |
Het maken van resources is mislukt. |
Provisioning |
De resource wordt ingericht. |
Succeeded |
De resource is gemaakt. |
Updating |
Resource wordt bijgewerkt. |
SanForCert
Alternatieve onderwerpnamen (SAN's) voor certificaat.
Name | Type | Description |
---|---|---|
dns |
string[] |
DNS-SAN's. |
ip |
string[] |
IP-adres-SAN's. |
ServiceType
Kubernetes-servicetypen die worden ondersteund door listener
Waarde | Description |
---|---|
ClusterIp |
Cluster-IP-service. |
LoadBalancer |
Load Balancer Service. |
NodePort |
Knooppuntpoortservice. |
systemData
Metagegevens met betrekking tot het maken en de laatste wijziging van de resource.
Name | Type | Description |
---|---|---|
createdAt |
string (date-time) |
De tijdstempel van het maken van resources (UTC). |
createdBy |
string |
De identiteit waarmee de resource is gemaakt. |
createdByType |
Het type identiteit waarmee de resource is gemaakt. |
|
lastModifiedAt |
string (date-time) |
De tijdstempel van de laatste wijziging van de resource (UTC) |
lastModifiedBy |
string |
De identiteit die de resource voor het laatst heeft gewijzigd. |
lastModifiedByType |
Het type identiteit dat de resource voor het laatst heeft gewijzigd. |
TlsCertMethod
Verzameling van verschillende TLS-typen, NOTE- Enum tegelijk hoeft slechts één van deze te worden ondersteund
Name | Type | Description |
---|---|---|
certManagerCertificateSpec |
Optie 1: automatisch beheer van TLS-servercertificaten met certificaatbeheer. |
|
manual |
Optie 2: handmatig tls-servercertificaatbeheer via een gedefinieerd geheim. |
|
mode |
Modus van TLS-servercertificaatbeheer. |
TlsCertMethodMode
Brokerverificatiemodus
Waarde | Description |
---|---|
Automatic |
Automatische configuratie van TLS-servercertificaat. |
Manual |
Handmatige configuratie van TLS-servercertificaat. |
X509ManualCertificate
Eigenschappen van X509-certificaatverificatie.
Name | Type | Description |
---|---|---|
secretRef |
string |
Kubernetes-geheim met een X.509-clientcertificaat. Dit is een verwijzing naar het geheim via een identificatienaam, niet het geheim zelf. |