Skip to main content
È disponibile una versione più recente di questo prodotto.
La versione in lingua italiana fornita proviene da una traduzione automatica. Per eventuali incoerenze, fare riferimento alla versione in lingua inglese.

Opzioni di configurazione dello storage

Collaboratori

Consulta le opzioni di configurazione disponibili per le configurazioni di Astra Trident.

Opzioni di configurazione globale

Queste opzioni di configurazione si applicano a tutte le configurazioni Astra Trident, indipendentemente dalla piattaforma di storage utilizzata.

Opzione Descrizione Esempio

version

Numero di versione del file di configurazione

1

storageDriverName

Nome del driver di storage

ontap-nas, ontap-san, ontap-nas-economy,
ontap-nas-flexgroup, solidfire-san, azure-netapp-files, o. gcp-cvs

storagePrefix

Prefisso opzionale per i nomi dei volumi. Impostazione predefinita: "Netappdvp_".

staging_

limitVolumeSize

Restrizione opzionale sulle dimensioni dei volumi. Predefinito: "" (non applicato)

10 g.

Suggerimento Non utilizzare storagePrefix (Incluso il valore predefinito) per i backend degli elementi. Per impostazione predefinita, il solidfire-san il driver ignora questa impostazione e non utilizza un prefisso. Si consiglia di utilizzare un tenantId specifico per la mappatura dei volumi Docker o i dati degli attributi che vengono popolati con la versione Docker, le informazioni sul driver e il nome raw di Docker nei casi in cui sia stato utilizzato il comando dei nomi.

Sono disponibili opzioni predefinite per evitare di doverle specificare su ogni volume creato. Il size l'opzione è disponibile per tutti i tipi di controller. Consultare la sezione relativa alla configurazione di ONTAP per un esempio su come impostare le dimensioni predefinite del volume.

Opzione Descrizione Esempio

size

Dimensione predefinita opzionale per i nuovi volumi. Predefinito: "1G"

10 G.

Configurazione di ONTAP

Oltre ai valori di configurazione globali sopra indicati, quando si utilizza ONTAP, sono disponibili le seguenti opzioni di primo livello.

Opzione Descrizione Esempio

managementLIF

Indirizzo IP della LIF di gestione ONTAP. È possibile specificare un nome di dominio completo (FQDN).

10.0.0.1

dataLIF

L'indirizzo IP del protocollo LIF; verrà derivato se non specificato. Per ontap-nas Driver only, è possibile specificare un FQDN, nel qual caso il FQDN verrà utilizzato per le operazioni di montaggio NFS. Per ontap-san Driver, l'impostazione predefinita prevede l'utilizzo di tutti gli IP LIF dei dati dalla SVM e l'utilizzo di multipath iSCSI. Specifica di un indirizzo IP per dataLIF per ontap-san i driver forzano il driver a disabilitare multipath e a utilizzare solo l'indirizzo specificato.

10.0.0.2

svm

Macchina virtuale per lo storage da utilizzare (obbligatorio, se la LIF di gestione è una LIF del cluster)

svm_nfs

username

Nome utente per la connessione al dispositivo di storage

vsadmin

password

Password per la connessione al dispositivo di storage

segreto

aggregate

Aggregato per il provisioning (facoltativo; se impostato, deve essere assegnato alla SVM). Per ontap-nas-flexgroup driver, questa opzione viene ignorata. Tutti gli aggregati assegnati alla SVM vengono utilizzati per il provisioning di un volume FlexGroup.

aggr1

limitAggregateUsage

Facoltativo, non eseguire il provisioning se l'utilizzo è superiore a questa percentuale

75%

nfsMountOptions

Controllo dettagliato delle opzioni di montaggio NFS; il valore predefinito è "-o nfsvers=3". Disponibile solo per ontap-nas e. ontap-nas-economy driver. "Fare clic qui per informazioni sulla configurazione degli host NFS".

-o nfsvers=4

igroupName

L'igroup utilizzato dal plugin; il default è "netappdvp". Disponibile solo per il fiume `ontap-san`d.

miigroup

limitVolumeSize

Dimensione massima del volume richiedente e dimensione massima del volume padre qtree. Per ontap-nas-economy Driver, questa opzione limita inoltre le dimensioni dei FlexVol creati.

300 g.

qtreesPerFlexvol

Il numero massimo di qtree per FlexVol deve essere compreso nell'intervallo [50, 300], il valore predefinito è 200. Per ontap-nas-economy Driver, questa opzione consente di personalizzare il numero massimo di qtree per FlexVol.

300

Sono disponibili opzioni predefinite per evitare di doverle specificare su ogni volume creato:

Opzione Descrizione Esempio

spaceReserve

Modalità di riserva dello spazio; "nessuno" (thin provisioning) o "volume" (thick)

nessuno

snapshotPolicy

Policy di Snapshot da utilizzare, il valore predefinito è "nessuno"

nessuno

snapshotReserve

Snapshot Reserve percent (percentuale riserva snapshot), il valore predefinito è "" per accettare il valore predefinito di ONTAP

10

splitOnClone

Dividere un clone dal suo padre al momento della creazione, per impostazione predefinita su "false"

falso

encryption

"Enable NetApp Volume Encryption (attiva crittografia volumi NetApp), il valore predefinito è "false"

vero

unixPermissions

Opzione NAS per volumi NFS con provisioning, valore predefinito "777"

777

snapshotDir

Opzione NAS per l'accesso a .snapshot directory, per impostazione predefinita impostata su "false"

vero

exportPolicy

Opzione NAS per l'utilizzo della policy di esportazione NFS, per impostazione predefinita "default"

predefinito

securityStyle

Opzione NAS per l'accesso al volume NFS fornito, per impostazione predefinita "unix"

misto

fileSystemType

OPZIONE SAN per selezionare il tipo di file system, il valore predefinito è "ext4"

xfs

tieringPolicy

Policy di tiering da utilizzare, il valore predefinito è "nessuno"; "solo snapshot" per la configurazione SVM-DR precedente a ONTAP 9.5

nessuno

Opzioni di scalabilità

Il ontap-nas e. ontap-san I driver creano un ONTAP FlexVol per ogni volume Docker. ONTAP supporta fino a 1000 FlexVol per nodo cluster con un massimo di 12,000 FlexVol. Se i requisiti del volume Docker rientrano in tale limite, il ontap-nas Il driver è la soluzione NAS preferita a causa delle funzionalità aggiuntive offerte da FlexVol, come le snapshot Docker-volume-granulare e la clonazione.

Se hai bisogno di più volumi Docker di quelli che possono essere contenuti nei limiti FlexVol, scegli ontap-nas-economy o il ontap-san-economy driver.

Il ontap-nas-economy Driver crea volumi Docker come Qtree ONTAP all'interno di un pool di FlexVol gestiti automaticamente. I qtree offrono una scalabilità di gran lunga superiore, fino a 100,000 per nodo cluster e 2,400,000 per cluster, a scapito di alcune funzionalità. Il ontap-nas-economy Il driver non supporta snapshot o cloning granulari dei volumi Docker.

Nota Il ontap-nas-economy Il driver non è attualmente supportato in Docker Swame, perché Swarm non orchestrava la creazione di volumi su più nodi.

Il ontap-san-economy Driver crea volumi Docker come LUN ONTAP all'interno di un pool condiviso di FlexVol gestiti automaticamente. In questo modo, ogni FlexVol non è limitato a un solo LUN e offre una migliore scalabilità per i carichi di lavoro SAN. A seconda dello storage array, ONTAP supporta fino a 16384 LUN per cluster. Poiché i volumi sono LUN sottostanti, questo driver supporta snapshot e cloning Docker-volume-granulare.

Scegliere ontap-nas-flexgroup il driver per aumentare il parallelismo a un singolo volume che può crescere nell'intervallo dei petabyte con miliardi di file. Alcuni casi di utilizzo ideali per FlexGroups includono ai/ML/DL, big data e analytics, build software, streaming, repository di file e così via. Trident utilizza tutti gli aggregati assegnati a una SVM durante il provisioning di un volume FlexGroup. Il supporto di FlexGroup in Trident ha anche le seguenti considerazioni:

  • Richiede ONTAP versione 9.2 o successiva.

  • Al momento della stesura del presente documento, FlexGroups supporta solo NFS v3.

  • Si consiglia di attivare gli identificatori NFSv3 a 64 bit per SVM.

  • La dimensione minima consigliata per il FlexGroup è di 100 GB.

  • La clonazione non è supportata per i volumi FlexGroup.

Per informazioni su FlexGroups e workload appropriati per FlexGroups, vedere "Guida all'implementazione e alle Best practice per i volumi NetApp FlexGroup".

Per ottenere funzionalità avanzate e scalabilità enorme nello stesso ambiente, è possibile eseguire più istanze del Docker Volume Plugin, con una sola applicazione ontap-nas e un altro utilizzo ontap-nas-economy.

File di configurazione ONTAP di esempio

Esempio NFS per ontap-nas driver

{
    "version": 1,
    "storageDriverName": "ontap-nas",
    "managementLIF": "10.0.0.1",
    "dataLIF": "10.0.0.2",
    "svm": "svm_nfs",
    "username": "vsadmin",
    "password": "secret",
    "aggregate": "aggr1",
    "defaults": {
      "size": "10G",
      "spaceReserve": "none",
      "exportPolicy": "default"
    }
}

Esempio NFS per ontap-nas-flexgroup driver

{
    "version": 1,
    "storageDriverName": "ontap-nas-flexgroup",
    "managementLIF": "10.0.0.1",
    "dataLIF": "10.0.0.2",
    "svm": "svm_nfs",
    "username": "vsadmin",
    "password": "secret",
    "defaults": {
      "size": "100G",
      "spaceReserve": "none",
      "exportPolicy": "default"
    }
}

Esempio NFS per ontap-nas-economy driver

{
    "version": 1,
    "storageDriverName": "ontap-nas-economy",
    "managementLIF": "10.0.0.1",
    "dataLIF": "10.0.0.2",
    "svm": "svm_nfs",
    "username": "vsadmin",
    "password": "secret",
    "aggregate": "aggr1"
}

Esempio iSCSI per ontap-san driver

{
    "version": 1,
    "storageDriverName": "ontap-san",
    "managementLIF": "10.0.0.1",
    "dataLIF": "10.0.0.3",
    "svm": "svm_iscsi",
    "username": "vsadmin",
    "password": "secret",
    "aggregate": "aggr1",
    "igroupName": "myigroup"
}

Esempio NFS per ontap-san-economy driver

{
    "version": 1,
    "storageDriverName": "ontap-san-economy",
    "managementLIF": "10.0.0.1",
    "dataLIF": "10.0.0.3",
    "svm": "svm_iscsi_eco",
    "username": "vsadmin",
    "password": "secret",
    "aggregate": "aggr1",
    "igroupName": "myigroup"
}

Configurazione del software Element

Oltre ai valori di configurazione globali, quando si utilizza il software Element (NetApp HCI/SolidFire), queste opzioni sono disponibili.

Opzione Descrizione Esempio

Endpoint

SVIP

Porta e indirizzo IP iSCSI

10.0.0.7:3260

TenantName

Tenant SolidFireF da utilizzare (creato se non trovato)

"docker"

InitiatorIFace

Specificare l'interfaccia quando si limita il traffico iSCSI all'interfaccia non predefinita

"predefinito"

Types

Specifiche QoS

Vedere l'esempio riportato di seguito

LegacyNamePrefix

Prefisso per installazioni Trident aggiornate. Se è stata utilizzata una versione di Trident precedente alla 1.3.2 ed è stato eseguito un aggiornamento con i volumi esistenti, è necessario impostare questo valore per accedere ai volumi precedenti che sono stati mappati tramite il metodo del nome del volume.

"netappdvp-"

Il solidfire-san Il driver non supporta Docker Swarm.

Esempio di file di configurazione del software Element

{
    "version": 1,
    "storageDriverName": "solidfire-san",
    "Endpoint": "https://admin:admin@192.168.160.3/json-rpc/8.0",
    "SVIP": "10.0.0.7:3260",
    "TenantName": "docker",
    "InitiatorIFace": "default",
    "Types": [
        {
            "Type": "Bronze",
            "Qos": {
                "minIOPS": 1000,
                "maxIOPS": 2000,
                "burstIOPS": 4000
            }
        },
        {
            "Type": "Silver",
            "Qos": {
                "minIOPS": 4000,
                "maxIOPS": 6000,
                "burstIOPS": 8000
            }
        },
        {
            "Type": "Gold",
            "Qos": {
                "minIOPS": 6000,
                "maxIOPS": 8000,
                "burstIOPS": 10000
            }
        }
    ]
}

Cloud Volumes Service (CVS) su configurazione GCP

Trident ora include il supporto per volumi più piccoli con il tipo di servizio CVS predefinito attivato "GCP". Per i backend creati con storageClass=software, I volumi avranno ora una dimensione di provisioning minima di 300 GiB. NetApp consiglia ai clienti di consumare volumi inferiori a 1 TiB per carichi di lavoro non in produzione. CVS attualmente fornisce questa funzione in disponibilità controllata e non fornisce supporto tecnico.

Nota Iscriviti per accedere a volumi inferiori a 1 TiB "qui".
Attenzione Quando si implementano backend utilizzando il tipo di servizio CVS predefinito storageClass=software, È necessario ottenere l'accesso alla funzionalità volumi sub-1TiB sul GCP per i numeri di progetto e gli ID progetto in questione. Ciò è necessario per Trident per eseguire il provisioning di volumi inferiori a 1 TiB. In caso contrario, le creazioni dei volumi non avranno esito positivo per i PVC con meno di 600 GiB. Ottenere l'accesso a volumi inferiori a 1 TiB utilizzando "questo modulo".

Il provisioning dei volumi creati da Trident per il livello di servizio CVS predefinito viene eseguito come segue:

  • I PVC di dimensioni inferiori a 300 GiB creano un volume CVS da 300 GiB.

  • I PVC compresi tra 300 GiB e 600 GiB determineranno la creazione di un volume CVS della dimensione richiesta da parte di Trident.

  • I PVC compresi tra 600 GiB e 1 TIB determineranno la creazione di un volume CVS 1TiB da parte di Trident.

  • I PVC che sono superiori a 1 TIB determineranno la creazione di un volume CVS della dimensione richiesta da parte di Trident.

Oltre ai valori di configurazione globali, quando si utilizza CVS su GCP, queste opzioni sono disponibili.

Opzione Descrizione Esempio

apiRegion

Regione dell'account CVS (obbligatoria). È la regione GCP in cui il backend eseguirà il provisioning dei volumi.

"us-west2"

projectNumber

Numero di progetto GCP (obbligatorio). Si trova nella schermata iniziale del portale Web GCP.

"123456789012"

hostProjectNumber

Numero di progetto host VPC condiviso GCP (richiesto se si utilizza un VPC condiviso)

"098765432109"

apiKey

Chiave API per l'account di servizio GCP con ruolo di amministratore CVS (obbligatorio). È il contenuto in formato JSON del file di chiave privata di un account di servizio GCP (copia integrale nel file di configurazione del backend). L'account del servizio deve avere il ruolo netappcloud.admin.

(contenuto del file delle chiavi private)

secretKey

Chiave segreta dell'account CVS (obbligatoria). Si trova nel portale web CVS in Impostazioni account > accesso API.

"predefinito"

proxyURL

URL proxy se il server proxy ha richiesto di connettersi all'account CVS. Il server proxy può essere un proxy HTTP o un proxy HTTPS. Nel caso di un proxy HTTPS, la convalida del certificato viene ignorata per consentire l'utilizzo di certificati autofirmati nel server proxy. I server proxy con autenticazione abilitata non sono supportati.

"http://proxy-server-hostname/”

nfsMountOptions

Opzioni di montaggio NFS; il valore predefinito è "-o nfsvers=3"

"nfsvers=3,proto=tcp,timeo=600"

serviceLevel

Livello di performance (standard, premium, Extreme), impostazione predefinita "standard"

"premium"

network

"Rete GCP utilizzata per i volumi CVS, impostazione predefinita "predefinita"

"predefinito"

Nota Se si utilizza una rete VPC condivisa, è necessario specificare entrambi projectNumber e. hostProjectNumber. In tal caso, projectNumber è il progetto di servizio e. hostProjectNumber è il progetto host.
Nota NetApp Cloud Volumes Service per GCP non supporta volumi CVS-Performance di dimensioni inferiori a 100 GiB o volumi CVS di dimensioni inferiori a 300 GiB. Per semplificare l'implementazione delle applicazioni, Trident crea automaticamente volumi di dimensioni minime se viene richiesto un volume troppo piccolo.

Quando si utilizza CVS su GCP, sono disponibili queste impostazioni predefinite delle opzioni del volume.

Opzione Descrizione Esempio

exportRule

Elenco di accesso NFS (indirizzi e/o subnet CIDR), valore predefinito "0.0.0.0/0"

"10.0.1.0/24,10.0.2.100"

snapshotDir

Controlla la visibilità di .snapshot directory

"falso"

snapshotReserve

Snapshot Reserve percent (percentuale riserva snapshot), il valore predefinito è "" per accettare il valore predefinito CVS pari a 0

"10"

size

Dimensione del volume, valore predefinito "100GiB"

"10T"

Esempio di CVS sul file di configurazione GCP

{
    "version": 1,
    "storageDriverName": "gcp-cvs",
    "projectNumber": "012345678901",
    "apiRegion": "us-west2",
    "apiKey": {
        "type": "service_account",
        "project_id": "my-gcp-project",
        "private_key_id": "<id_value>",
        "private_key": "
        -----BEGIN PRIVATE KEY-----
        <key_value>
        -----END PRIVATE KEY-----\n",
        "client_email": "cloudvolumes-admin-sa@my-gcp-project.iam.gserviceaccount.com",
        "client_id": "123456789012345678901",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/cloudvolumes-admin-sa%40my-gcp-project.iam.gserviceaccount.com"
    },
    "proxyURL": "http://proxy-server-hostname/"
}

Configurazione di Azure NetApp Files

Per configurare e utilizzare un "Azure NetApp Files" back-end, è necessario quanto segue:

  • subscriptionID Da un abbonamento Azure con Azure NetApp Files attivato

  • tenantID, clientID, e. clientSecret da un "Registrazione dell'app" In Azure Active Directory con autorizzazioni sufficienti per il servizio Azure NetApp Files

  • Ubicazione di Azure che ne contiene almeno una "subnet delegata"

Suggerimento Se si utilizza Azure NetApp Files per la prima volta o in una nuova posizione, è necessaria una configurazione iniziale di "guida rapida" ti guideranno.
Nota Astra Trident 21.04.0 e versioni precedenti non supportano i pool di capacità QoS manuali.
Opzione Descrizione Predefinito

version

Sempre 1

storageDriverName

"azure-netapp-files"

backendName

Nome personalizzato per il backend dello storage

Nome del driver + "_" + caratteri casuali

subscriptionID

L'ID dell'abbonamento dell'abbonamento Azure

tenantID

L'ID tenant di una registrazione app

clientID

L'ID client di una registrazione dell'applicazione

clientSecret

Il segreto del client da una registrazione dell'applicazione

serviceLevel

Uno tra "Standard", "Premium" o "Ultra"

"" (casuale)

location

Nome della posizione Azure in cui verranno creati nuovi volumi

"" (casuale)

virtualNetwork

Nome di una rete virtuale con una subnet delegata

"" (casuale)

subnet

Nome di una subnet delegata a. Microsoft.Netapp/volumes

"" (casuale)

nfsMountOptions

Controllo dettagliato delle opzioni di montaggio NFS

"-o nfsvers=3"

limitVolumeSize

Fallire il provisioning se la dimensione del volume richiesta è superiore a questo valore

"" (non applicato per impostazione predefinita)

Nota Il servizio Azure NetApp Files non supporta volumi di dimensioni inferiori a 100 GB. Per semplificare l'implementazione delle applicazioni, Trident crea automaticamente volumi da 100 GB se viene richiesto un volume più piccolo.

Per impostazione predefinita, è possibile controllare il provisioning di ciascun volume utilizzando queste opzioni in una sezione speciale della configurazione.

Opzione Descrizione Predefinito

exportRule

Regola o regole di esportazione per i nuovi volumi. Deve essere un elenco separato da virgole di qualsiasi combinazione di indirizzi IPv4 o subnet IPv4 nella notazione CIDR.

"0.0.0.0/0"

snapshotDir

Controlla la visibilità di .snapshot directory

"falso"

size

La dimensione predefinita dei nuovi volumi

"100 G"

Configurazioni Azure NetApp Files di esempio

Esempio 1: Configurazione backend minima per Azure-netapp-Files

Questa è la configurazione backend minima assoluta. Con questa configurazione, Trident scoprirà tutti gli account NetApp, i pool di capacità e le subnet delegate ad ANF in ogni sede in tutto il mondo e inserirà nuovi volumi in uno di essi in maniera casuale.

Questa configurazione è utile quando si inizia a utilizzare ANF e si provano le cose, tuttavia, in pratica, è necessario fornire un ambito aggiuntivo per i volumi che si effettua il provisioning per assicurarsi che abbiano le caratteristiche desiderate e finiscano in una rete vicina al calcolo che lo utilizza. Per ulteriori dettagli, vedere gli esempi successivi.

{
    "version": 1,
    "storageDriverName": "azure-netapp-files",
    "subscriptionID": "9f87c765-4774-fake-ae98-a721add45451",
    "tenantID": "68e4f836-edc1-fake-bff9-b2d865ee56cf",
    "clientID": "dd043f63-bf8e-fake-8076-8de91e5713aa",
    "clientSecret": "SECRET"
}

Esempio 2: Singola posizione e livello di servizio specifico per Azure-netapp-Files

Questa configurazione di back-end colloca i volumi nella posizione "eastus" di Azure in un pool di capacità "Premium". Trident rileva automaticamente tutte le sottoreti delegate ad ANF in quella posizione e inserisce un nuovo volume su una di esse in modo casuale.

{
    "version": 1,
    "storageDriverName": "azure-netapp-files",
    "subscriptionID": "9f87c765-4774-fake-ae98-a721add45451",
    "tenantID": "68e4f836-edc1-fake-bff9-b2d865ee56cf",
    "clientID": "dd043f63-bf8e-fake-8076-8de91e5713aa",
    "clientSecret": "SECRET",
    "location": "eastus",
    "serviceLevel": "Premium"
}

Esempio 3: Configurazione avanzata per Azure-netapp-Files

Questa configurazione di back-end riduce ulteriormente l'ambito del posizionamento del volume in una singola subnet e modifica alcune impostazioni predefinite di provisioning del volume.

{
    "version": 1,
    "storageDriverName": "azure-netapp-files",
    "subscriptionID": "9f87c765-4774-fake-ae98-a721add45451",
    "tenantID": "68e4f836-edc1-fake-bff9-b2d865ee56cf",
    "clientID": "dd043f63-bf8e-fake-8076-8de91e5713aa",
    "clientSecret": "SECRET",
    "location": "eastus",
    "serviceLevel": "Premium",
    "virtualNetwork": "my-virtual-network",
    "subnet": "my-subnet",
    "nfsMountOptions": "nfsvers=3,proto=tcp,timeo=600",
    "limitVolumeSize": "500Gi",
    "defaults": {
        "exportRule": "10.0.0.0/24,10.0.1.0/24,10.0.2.100",
        "size": "200Gi"
    }
}

Esempio 4: Pool di storage virtuali con file Azure-netapp

Questa configurazione di back-end definisce più configurazioni "pool di storage" in un singolo file. Ciò è utile quando si dispone di più pool di capacità che supportano diversi livelli di servizio e si desidera creare classi di storage in Kubernetes che ne rappresentano.

Questo sta semplicemente graffiando la superficie della potenza dei pool di storage virtuali e delle relative etichette.

{
    "version": 1,
    "storageDriverName": "azure-netapp-files",
    "subscriptionID": "9f87c765-4774-fake-ae98-a721add45451",
    "tenantID": "68e4f836-edc1-fake-bff9-b2d865ee56cf",
    "clientID": "dd043f63-bf8e-fake-8076-8de91e5713aa",
    "clientSecret": "SECRET",
    "nfsMountOptions": "nfsvers=3,proto=tcp,timeo=600",
    "labels": {
        "cloud": "azure"
    },
    "location": "eastus",

    "storage": [
        {
            "labels": {
                "performance": "gold"
            },
            "serviceLevel": "Ultra"
        },
        {
            "labels": {
                "performance": "silver"
            },
            "serviceLevel": "Premium"
        },
        {
            "labels": {
                "performance": "bronze"
            },
            "serviceLevel": "Standard",
        }
    ]
}