import * as pulumi from "@pulumi/pulumi"; import * as inputs from "../types/input"; import * as outputs from "../types/output"; /** * Manages a Application Volume Group for Oracle application. * * > **Note:** This feature is intended to be used for Oracle workloads only, with several requirements, please refer to [Understand Azure NetApp Files application volume group for Oracle](https://learn.microsoft.com/en-us/azure/azure-netapp-files/application-volume-oracle-introduction) document as the starting point to understand this feature before using it with Terraform. * * ## Example Usage * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as azure from "@pulumi/azure"; * * const example = new azure.core.ResourceGroup("example", { * name: `${prefix}-resources`, * location: location, * tags: { * SkipNRMSNSG: "true", * }, * }); * const exampleVirtualNetwork = new azure.network.VirtualNetwork("example", { * name: `${prefix}-vnet`, * location: example.location, * resourceGroupName: example.name, * addressSpaces: ["10.88.0.0/16"], * }); * const exampleSubnet = new azure.network.Subnet("example", { * name: `${prefix}-delegated-subnet`, * resourceGroupName: example.name, * virtualNetworkName: exampleVirtualNetwork.name, * addressPrefixes: ["10.88.2.0/24"], * delegations: [{ * name: "exampledelegation", * serviceDelegation: { * name: "Microsoft.Netapp/volumes", * actions: [ * "Microsoft.Network/networkinterfaces/*", * "Microsoft.Network/virtualNetworks/subnets/join/action", * ], * }, * }], * }); * const exampleAccount = new azure.netapp.Account("example", { * name: `${prefix}-netapp-account`, * location: example.location, * resourceGroupName: example.name, * }, { * dependsOn: [exampleSubnet], * }); * const examplePool = new azure.netapp.Pool("example", { * name: `${prefix}-netapp-pool`, * location: example.location, * resourceGroupName: example.name, * accountName: exampleAccount.name, * serviceLevel: "Standard", * sizeInTb: 4, * qosType: "Manual", * }); * const exampleVolumeGroupOracle = new azure.netapp.VolumeGroupOracle("example", { * name: `${prefix}-NetAppVolumeGroupOracle`, * location: example.location, * resourceGroupName: example.name, * accountName: exampleAccount.name, * groupDescription: "Example volume group for Oracle", * applicationIdentifier: "TST", * volumes: [ * { * name: `${prefix}-volume-ora1`, * volumePath: `${prefix}-my-unique-file-ora-path-1`, * serviceLevel: "Standard", * capacityPoolId: examplePool.id, * subnetId: exampleSubnet.id, * zone: "1", * volumeSpecName: "ora-data1", * storageQuotaInGb: 1024, * throughputInMibps: 24, * protocols: "NFSv4.1", * securityStyle: "unix", * snapshotDirectoryVisible: false, * exportPolicyRules: [{ * ruleIndex: 1, * allowedClients: "0.0.0.0/0", * nfsv3Enabled: false, * nfsv41Enabled: true, * unixReadOnly: false, * unixReadWrite: true, * rootAccessEnabled: false, * }], * }, * { * name: `${prefix}-volume-oraLog`, * volumePath: `${prefix}-my-unique-file-oralog-path`, * serviceLevel: "Standard", * capacityPoolId: examplePool.id, * subnetId: exampleSubnet.id, * zone: "1", * volumeSpecName: "ora-log", * storageQuotaInGb: 1024, * throughputInMibps: 24, * protocols: "NFSv4.1", * securityStyle: "unix", * snapshotDirectoryVisible: false, * exportPolicyRules: [{ * ruleIndex: 1, * allowedClients: "0.0.0.0/0", * nfsv3Enabled: false, * nfsv41Enabled: true, * unixReadOnly: false, * unixReadWrite: true, * rootAccessEnabled: false, * }], * }, * ], * }); * ``` * * ### Cross-Region Replication * * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as azure from "@pulumi/azure"; * * const example = new azure.core.ResourceGroup("example", { * name: `${prefix}-resources`, * location: location, * tags: { * SkipNRMSNSG: "true", * }, * }); * // Primary region networking * const examplePrimary = new azure.network.VirtualNetwork("example_primary", { * name: `${prefix}-vnet-primary`, * location: example.location, * resourceGroupName: example.name, * addressSpaces: ["10.47.0.0/16"], * }); * const examplePrimarySubnet = new azure.network.Subnet("example_primary", { * name: `${prefix}-delegated-subnet-primary`, * resourceGroupName: example.name, * virtualNetworkName: examplePrimary.name, * addressPrefixes: ["10.47.2.0/24"], * delegations: [{ * name: "exampledelegation", * serviceDelegation: { * name: "Microsoft.Netapp/volumes", * actions: [ * "Microsoft.Network/networkinterfaces/*", * "Microsoft.Network/virtualNetworks/subnets/join/action", * ], * }, * }], * }); * // Secondary region networking * const exampleSecondary = new azure.network.VirtualNetwork("example_secondary", { * name: `${prefix}-vnet-secondary`, * location: altLocation, * resourceGroupName: example.name, * addressSpaces: ["10.48.0.0/16"], * }); * const exampleSecondarySubnet = new azure.network.Subnet("example_secondary", { * name: `${prefix}-delegated-subnet-secondary`, * resourceGroupName: example.name, * virtualNetworkName: exampleSecondary.name, * addressPrefixes: ["10.48.2.0/24"], * delegations: [{ * name: "exampledelegation", * serviceDelegation: { * name: "Microsoft.Netapp/volumes", * actions: [ * "Microsoft.Network/networkinterfaces/*", * "Microsoft.Network/virtualNetworks/subnets/join/action", * ], * }, * }], * }); * // Primary region NetApp infrastructure * const examplePrimaryAccount = new azure.netapp.Account("example_primary", { * name: `${prefix}-netapp-account-primary`, * location: example.location, * resourceGroupName: example.name, * }, { * dependsOn: [examplePrimarySubnet], * }); * const examplePrimaryPool = new azure.netapp.Pool("example_primary", { * name: `${prefix}-netapp-pool-primary`, * location: example.location, * resourceGroupName: example.name, * accountName: examplePrimaryAccount.name, * serviceLevel: "Standard", * sizeInTb: 4, * qosType: "Manual", * }); * // Secondary region NetApp infrastructure * const exampleSecondaryAccount = new azure.netapp.Account("example_secondary", { * name: `${prefix}-netapp-account-secondary`, * location: altLocation, * resourceGroupName: example.name, * }, { * dependsOn: [exampleSecondarySubnet], * }); * const exampleSecondaryPool = new azure.netapp.Pool("example_secondary", { * name: `${prefix}-netapp-pool-secondary`, * location: altLocation, * resourceGroupName: example.name, * accountName: exampleSecondaryAccount.name, * serviceLevel: "Standard", * sizeInTb: 4, * qosType: "Manual", * }); * // Primary Oracle volume group * const examplePrimaryVolumeGroupOracle = new azure.netapp.VolumeGroupOracle("example_primary", { * name: `${prefix}-NetAppVolumeGroupOracle-primary`, * location: example.location, * resourceGroupName: example.name, * accountName: examplePrimaryAccount.name, * groupDescription: "Primary Oracle volume group for CRR", * applicationIdentifier: "TST", * volumes: [{ * name: `${prefix}-volume-ora1-primary`, * volumePath: `${prefix}-my-unique-file-ora-path-1-primary`, * serviceLevel: "Standard", * capacityPoolId: examplePrimaryPool.id, * subnetId: examplePrimarySubnet.id, * volumeSpecName: "ora-data1", * storageQuotaInGb: 1024, * throughputInMibps: 24, * protocols: "NFSv4.1", * securityStyle: "unix", * snapshotDirectoryVisible: false, * exportPolicyRules: [{ * ruleIndex: 1, * allowedClients: "0.0.0.0/0", * nfsv3Enabled: false, * nfsv41Enabled: true, * unixReadOnly: false, * unixReadWrite: true, * rootAccessEnabled: false, * }], * }], * }); * // Secondary Oracle volume group with CRR * const exampleSecondaryVolumeGroupOracle = new azure.netapp.VolumeGroupOracle("example_secondary", { * name: `${prefix}-NetAppVolumeGroupOracle-secondary`, * location: altLocation, * resourceGroupName: example.name, * accountName: exampleSecondaryAccount.name, * groupDescription: "Secondary Oracle volume group for CRR", * applicationIdentifier: "TST", * volumes: [{ * name: `${prefix}-volume-ora1-secondary`, * volumePath: `${prefix}-my-unique-file-ora-path-1-secondary`, * serviceLevel: "Standard", * capacityPoolId: exampleSecondaryPool.id, * subnetId: exampleSecondarySubnet.id, * volumeSpecName: "ora-data1", * storageQuotaInGb: 1024, * throughputInMibps: 24, * protocols: "NFSv4.1", * securityStyle: "unix", * snapshotDirectoryVisible: false, * exportPolicyRules: [{ * ruleIndex: 1, * allowedClients: "0.0.0.0/0", * nfsv3Enabled: false, * nfsv41Enabled: true, * unixReadOnly: false, * unixReadWrite: true, * rootAccessEnabled: false, * }], * dataProtectionReplication: { * endpointType: "dst", * remoteVolumeLocation: example.location, * remoteVolumeResourceId: examplePrimaryVolumeGroupOracle.volumes.apply(volumes => volumes[0].id), * replicationFrequency: "10minutes", * }, * }], * }, { * dependsOn: [examplePrimaryVolumeGroupOracle], * }); * ``` * * ## API Providers * * * This resource uses the following Azure API Providers: * * * `Microsoft.NetApp` - 2025-12-01 * * ## Import * * Application Volume Groups can be imported using the `resource id`, e.g. * * ```sh * $ pulumi import azure:netapp/volumeGroupOracle:VolumeGroupOracle example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mytest-rg/providers/Microsoft.NetApp/netAppAccounts/netapp-account-test/volumeGroups/netapp-volumegroup-test * ``` */ export declare class VolumeGroupOracle extends pulumi.CustomResource { /** * Get an existing VolumeGroupOracle 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: string, id: pulumi.Input, state?: VolumeGroupOracleState, opts?: pulumi.CustomResourceOptions): VolumeGroupOracle; /** * Returns true if the given object is an instance of VolumeGroupOracle. This is designed to work even * when multiple copies of the Pulumi SDK have been loaded into the same process. */ static isInstance(obj: any): obj is VolumeGroupOracle; /** * Name of the account where the application volume group belong to. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly accountName: pulumi.Output; /** * The SAP System ID, maximum 3 characters, e.g. `OR1`. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly applicationIdentifier: pulumi.Output; /** * Volume group description. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly groupDescription: pulumi.Output; /** * The Azure Region where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly location: pulumi.Output; /** * The name which should be used for this Application Volume Group. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly name: pulumi.Output; /** * The name of the Resource Group where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ readonly resourceGroupName: pulumi.Output; /** * One or more `volume` blocks as defined below. */ readonly volumes: pulumi.Output; /** * Create a VolumeGroupOracle resource with the given unique name, arguments, and options. * * @param name The _unique_ name of the resource. * @param args The arguments to use to populate this resource's properties. * @param opts A bag of options that control this resource's behavior. */ constructor(name: string, args: VolumeGroupOracleArgs, opts?: pulumi.CustomResourceOptions); } /** * Input properties used for looking up and filtering VolumeGroupOracle resources. */ export interface VolumeGroupOracleState { /** * Name of the account where the application volume group belong to. Changing this forces a new Application Volume Group to be created and data will be lost. */ accountName?: pulumi.Input; /** * The SAP System ID, maximum 3 characters, e.g. `OR1`. Changing this forces a new Application Volume Group to be created and data will be lost. */ applicationIdentifier?: pulumi.Input; /** * Volume group description. Changing this forces a new Application Volume Group to be created and data will be lost. */ groupDescription?: pulumi.Input; /** * The Azure Region where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ location?: pulumi.Input; /** * The name which should be used for this Application Volume Group. Changing this forces a new Application Volume Group to be created and data will be lost. */ name?: pulumi.Input; /** * The name of the Resource Group where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ resourceGroupName?: pulumi.Input; /** * One or more `volume` blocks as defined below. */ volumes?: pulumi.Input[]>; } /** * The set of arguments for constructing a VolumeGroupOracle resource. */ export interface VolumeGroupOracleArgs { /** * Name of the account where the application volume group belong to. Changing this forces a new Application Volume Group to be created and data will be lost. */ accountName: pulumi.Input; /** * The SAP System ID, maximum 3 characters, e.g. `OR1`. Changing this forces a new Application Volume Group to be created and data will be lost. */ applicationIdentifier: pulumi.Input; /** * Volume group description. Changing this forces a new Application Volume Group to be created and data will be lost. */ groupDescription: pulumi.Input; /** * The Azure Region where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ location?: pulumi.Input; /** * The name which should be used for this Application Volume Group. Changing this forces a new Application Volume Group to be created and data will be lost. */ name?: pulumi.Input; /** * The name of the Resource Group where the Application Volume Group should exist. Changing this forces a new Application Volume Group to be created and data will be lost. */ resourceGroupName: pulumi.Input; /** * One or more `volume` blocks as defined below. */ volumes: pulumi.Input[]>; }