# coding=utf-8
# *** WARNING: this file was generated by pulumi-language-python. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins as _builtins
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs
from ._inputs import *

__all__ = ['SingleNodeVirtualInstanceArgs', 'SingleNodeVirtualInstance']

@pulumi.input_type
class SingleNodeVirtualInstanceArgs:
    def __init__(__self__, *,
                 app_location: pulumi.Input[_builtins.str],
                 environment: pulumi.Input[_builtins.str],
                 resource_group_name: pulumi.Input[_builtins.str],
                 sap_fqdn: pulumi.Input[_builtins.str],
                 sap_product: pulumi.Input[_builtins.str],
                 single_server_configuration: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs'],
                 identity: Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']] = None,
                 location: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resources_network_access_type: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None):
        """
        The set of arguments for constructing a SingleNodeVirtualInstance resource.

        :param pulumi.Input[_builtins.str] app_location: The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] environment: The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] resource_group_name: The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_fqdn: The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_product: The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        :param pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs'] single_server_configuration: A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input['SingleNodeVirtualInstanceIdentityArgs'] identity: An `identity` block as defined below.
        :param pulumi.Input[_builtins.str] location: The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resource_group_name: The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resources_network_access_type: The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        :param pulumi.Input[_builtins.str] name: Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] tags: A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        pulumi.set(__self__, "app_location", app_location)
        pulumi.set(__self__, "environment", environment)
        pulumi.set(__self__, "resource_group_name", resource_group_name)
        pulumi.set(__self__, "sap_fqdn", sap_fqdn)
        pulumi.set(__self__, "sap_product", sap_product)
        pulumi.set(__self__, "single_server_configuration", single_server_configuration)
        if identity is not None:
            pulumi.set(__self__, "identity", identity)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if managed_resource_group_name is not None:
            pulumi.set(__self__, "managed_resource_group_name", managed_resource_group_name)
        if managed_resources_network_access_type is not None:
            pulumi.set(__self__, "managed_resources_network_access_type", managed_resources_network_access_type)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @_builtins.property
    @pulumi.getter(name="appLocation")
    def app_location(self) -> pulumi.Input[_builtins.str]:
        """
        The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "app_location")

    @app_location.setter
    def app_location(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "app_location", value)

    @_builtins.property
    @pulumi.getter
    def environment(self) -> pulumi.Input[_builtins.str]:
        """
        The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "environment")

    @environment.setter
    def environment(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "environment", value)

    @_builtins.property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Input[_builtins.str]:
        """
        The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "resource_group_name", value)

    @_builtins.property
    @pulumi.getter(name="sapFqdn")
    def sap_fqdn(self) -> pulumi.Input[_builtins.str]:
        """
        The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_fqdn")

    @sap_fqdn.setter
    def sap_fqdn(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "sap_fqdn", value)

    @_builtins.property
    @pulumi.getter(name="sapProduct")
    def sap_product(self) -> pulumi.Input[_builtins.str]:
        """
        The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_product")

    @sap_product.setter
    def sap_product(self, value: pulumi.Input[_builtins.str]):
        pulumi.set(self, "sap_product", value)

    @_builtins.property
    @pulumi.getter(name="singleServerConfiguration")
    def single_server_configuration(self) -> pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs']:
        """
        A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "single_server_configuration")

    @single_server_configuration.setter
    def single_server_configuration(self, value: pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs']):
        pulumi.set(self, "single_server_configuration", value)

    @_builtins.property
    @pulumi.getter
    def identity(self) -> Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']]:
        """
        An `identity` block as defined below.
        """
        return pulumi.get(self, "identity")

    @identity.setter
    def identity(self, value: Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']]):
        pulumi.set(self, "identity", value)

    @_builtins.property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "location", value)

    @_builtins.property
    @pulumi.getter(name="managedResourceGroupName")
    def managed_resource_group_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "managed_resource_group_name")

    @managed_resource_group_name.setter
    def managed_resource_group_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "managed_resource_group_name", value)

    @_builtins.property
    @pulumi.getter(name="managedResourcesNetworkAccessType")
    def managed_resources_network_access_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        """
        return pulumi.get(self, "managed_resources_network_access_type")

    @managed_resources_network_access_type.setter
    def managed_resources_network_access_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "managed_resources_network_access_type", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]:
        """
        A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "tags", value)


@pulumi.input_type
class _SingleNodeVirtualInstanceState:
    def __init__(__self__, *,
                 app_location: Optional[pulumi.Input[_builtins.str]] = None,
                 environment: Optional[pulumi.Input[_builtins.str]] = None,
                 identity: Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']] = None,
                 location: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resources_network_access_type: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_fqdn: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_product: Optional[pulumi.Input[_builtins.str]] = None,
                 single_server_configuration: Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs']] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None):
        """
        Input properties used for looking up and filtering SingleNodeVirtualInstance resources.

        :param pulumi.Input[_builtins.str] app_location: The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] environment: The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        :param pulumi.Input['SingleNodeVirtualInstanceIdentityArgs'] identity: An `identity` block as defined below.
        :param pulumi.Input[_builtins.str] location: The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resource_group_name: The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resources_network_access_type: The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        :param pulumi.Input[_builtins.str] name: Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] resource_group_name: The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_fqdn: The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_product: The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        :param pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs'] single_server_configuration: A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] tags: A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        if app_location is not None:
            pulumi.set(__self__, "app_location", app_location)
        if environment is not None:
            pulumi.set(__self__, "environment", environment)
        if identity is not None:
            pulumi.set(__self__, "identity", identity)
        if location is not None:
            pulumi.set(__self__, "location", location)
        if managed_resource_group_name is not None:
            pulumi.set(__self__, "managed_resource_group_name", managed_resource_group_name)
        if managed_resources_network_access_type is not None:
            pulumi.set(__self__, "managed_resources_network_access_type", managed_resources_network_access_type)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if resource_group_name is not None:
            pulumi.set(__self__, "resource_group_name", resource_group_name)
        if sap_fqdn is not None:
            pulumi.set(__self__, "sap_fqdn", sap_fqdn)
        if sap_product is not None:
            pulumi.set(__self__, "sap_product", sap_product)
        if single_server_configuration is not None:
            pulumi.set(__self__, "single_server_configuration", single_server_configuration)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @_builtins.property
    @pulumi.getter(name="appLocation")
    def app_location(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "app_location")

    @app_location.setter
    def app_location(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "app_location", value)

    @_builtins.property
    @pulumi.getter
    def environment(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "environment")

    @environment.setter
    def environment(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "environment", value)

    @_builtins.property
    @pulumi.getter
    def identity(self) -> Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']]:
        """
        An `identity` block as defined below.
        """
        return pulumi.get(self, "identity")

    @identity.setter
    def identity(self, value: Optional[pulumi.Input['SingleNodeVirtualInstanceIdentityArgs']]):
        pulumi.set(self, "identity", value)

    @_builtins.property
    @pulumi.getter
    def location(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @location.setter
    def location(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "location", value)

    @_builtins.property
    @pulumi.getter(name="managedResourceGroupName")
    def managed_resource_group_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "managed_resource_group_name")

    @managed_resource_group_name.setter
    def managed_resource_group_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "managed_resource_group_name", value)

    @_builtins.property
    @pulumi.getter(name="managedResourcesNetworkAccessType")
    def managed_resources_network_access_type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        """
        return pulumi.get(self, "managed_resources_network_access_type")

    @managed_resources_network_access_type.setter
    def managed_resources_network_access_type(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "managed_resources_network_access_type", value)

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @name.setter
    def name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "name", value)

    @_builtins.property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @resource_group_name.setter
    def resource_group_name(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "resource_group_name", value)

    @_builtins.property
    @pulumi.getter(name="sapFqdn")
    def sap_fqdn(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_fqdn")

    @sap_fqdn.setter
    def sap_fqdn(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "sap_fqdn", value)

    @_builtins.property
    @pulumi.getter(name="sapProduct")
    def sap_product(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_product")

    @sap_product.setter
    def sap_product(self, value: Optional[pulumi.Input[_builtins.str]]):
        pulumi.set(self, "sap_product", value)

    @_builtins.property
    @pulumi.getter(name="singleServerConfiguration")
    def single_server_configuration(self) -> Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs']]:
        """
        A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "single_server_configuration")

    @single_server_configuration.setter
    def single_server_configuration(self, value: Optional[pulumi.Input['SingleNodeVirtualInstanceSingleServerConfigurationArgs']]):
        pulumi.set(self, "single_server_configuration", value)

    @_builtins.property
    @pulumi.getter
    def tags(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]:
        """
        A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        return pulumi.get(self, "tags")

    @tags.setter
    def tags(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]]):
        pulumi.set(self, "tags", value)


@pulumi.type_token("azure:workloadssap/singleNodeVirtualInstance:SingleNodeVirtualInstance")
class SingleNodeVirtualInstance(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 app_location: Optional[pulumi.Input[_builtins.str]] = None,
                 environment: Optional[pulumi.Input[_builtins.str]] = None,
                 identity: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceIdentityArgs', 'SingleNodeVirtualInstanceIdentityArgsDict']]] = None,
                 location: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resources_network_access_type: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_fqdn: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_product: Optional[pulumi.Input[_builtins.str]] = None,
                 single_server_configuration: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceSingleServerConfigurationArgs', 'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        """
        Manages an SAP Single Node Virtual Instance with new SAP System.

        > **Note:** Before using this resource, it's required to submit the request of registering the Resource Provider with Azure CLI `az provider register --namespace "Microsoft.Workloads"`. The Resource Provider can take a while to register, you can check the status by running `az provider show --namespace "Microsoft.Workloads" --query "registrationState"`. Once this outputs "Registered" the Resource Provider is available for use.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_azure as azure
        import pulumi_tls as tls

        current = azure.core.get_subscription()
        example_private_key = tls.index.PrivateKey("example",
            algorithm=RSA,
            rsa_bits=4096)
        example = tls.index.public_key(private_key_pem=example_private_key["privateKeyPem"])
        example_resource_group = azure.core.ResourceGroup("example",
            name="example-resources",
            location="West Europe")
        example_user_assigned_identity = azure.authorization.UserAssignedIdentity("example",
            name="example-uai",
            location=example_resource_group.location,
            resource_group_name=example_resource_group.name)
        example_assignment = azure.authorization.Assignment("example",
            scope=current.id,
            role_definition_name="Azure Center for SAP solutions service role",
            principal_id=example_user_assigned_identity.principal_id)
        example_virtual_network = azure.network.VirtualNetwork("example",
            name="example-vnet",
            address_spaces=["10.0.0.0/16"],
            location=example_resource_group.location,
            resource_group_name=example_resource_group.name)
        example_subnet = azure.network.Subnet("example",
            name="example-subnet",
            resource_group_name=example_resource_group.name,
            virtual_network_name=example_virtual_network.name,
            address_prefixes=["10.0.2.0/24"])
        app = azure.core.ResourceGroup("app",
            name="example-sapapp",
            location="West Europe",
            opts = pulumi.ResourceOptions(depends_on=[example_subnet]))
        example_single_node_virtual_instance = azure.workloadssap.SingleNodeVirtualInstance("example",
            name="X05",
            resource_group_name=example_resource_group.name,
            location=example_resource_group.location,
            environment="NonProd",
            sap_product="S4HANA",
            managed_resource_group_name="managedTestRG",
            app_location=app.location,
            sap_fqdn="sap.bpaas.com",
            single_server_configuration={
                "app_resource_group_name": app.name,
                "subnet_id": example_subnet.id,
                "database_type": "HANA",
                "secondary_ip_enabled": True,
                "virtual_machine_configuration": {
                    "virtual_machine_size": "Standard_E32ds_v4",
                    "image": {
                        "offer": "RHEL-SAP-HA",
                        "publisher": "RedHat",
                        "sku": "82sapha-gen2",
                        "version": "latest",
                    },
                    "os_profile": {
                        "admin_username": "testAdmin",
                        "ssh_private_key": example_private_key["privateKeyPem"],
                        "ssh_public_key": example["publicKeyOpenssh"],
                    },
                },
                "disk_volume_configurations": [
                    {
                        "volume_name": "hana/data",
                        "number_of_disks": 3,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "hana/log",
                        "number_of_disks": 3,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "hana/shared",
                        "number_of_disks": 1,
                        "size_in_gb": 256,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "usr/sap",
                        "number_of_disks": 1,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "backup",
                        "number_of_disks": 2,
                        "size_in_gb": 256,
                        "sku_name": "StandardSSD_LRS",
                    },
                    {
                        "volume_name": "os",
                        "number_of_disks": 1,
                        "size_in_gb": 64,
                        "sku_name": "StandardSSD_LRS",
                    },
                ],
                "virtual_machine_resource_names": {
                    "host_name": "apphostName0",
                    "os_disk_name": "app0osdisk",
                    "virtual_machine_name": "appvm0",
                    "network_interface_names": ["appnic0"],
                    "data_disks": [{
                        "volume_name": "default",
                        "names": ["app0disk0"],
                    }],
                },
            },
            identity={
                "type": "UserAssigned",
                "identity_ids": [example_user_assigned_identity.id],
            },
            opts = pulumi.ResourceOptions(depends_on=[example_assignment]))
        ```

        ## API Providers

        <!-- This section is generated, changes will be overwritten -->
        This resource uses the following Azure API Providers:

        * `Microsoft.Workloads` - 2024-09-01

        ## Import

        SAP Single Node Virtual Instances with new SAP Systems can be imported using the `resource id`, e.g.

        ```sh
        $ pulumi import azure:workloadssap/singleNodeVirtualInstance:SingleNodeVirtualInstance example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Workloads/sapVirtualInstances/vis1
        ```


        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] app_location: The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] environment: The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        :param pulumi.Input[Union['SingleNodeVirtualInstanceIdentityArgs', 'SingleNodeVirtualInstanceIdentityArgsDict']] identity: An `identity` block as defined below.
        :param pulumi.Input[_builtins.str] location: The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resource_group_name: The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resources_network_access_type: The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        :param pulumi.Input[_builtins.str] name: Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] resource_group_name: The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_fqdn: The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_product: The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        :param pulumi.Input[Union['SingleNodeVirtualInstanceSingleServerConfigurationArgs', 'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict']] single_server_configuration: A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] tags: A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: SingleNodeVirtualInstanceArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Manages an SAP Single Node Virtual Instance with new SAP System.

        > **Note:** Before using this resource, it's required to submit the request of registering the Resource Provider with Azure CLI `az provider register --namespace "Microsoft.Workloads"`. The Resource Provider can take a while to register, you can check the status by running `az provider show --namespace "Microsoft.Workloads" --query "registrationState"`. Once this outputs "Registered" the Resource Provider is available for use.

        ## Example Usage

        ```python
        import pulumi
        import pulumi_azure as azure
        import pulumi_tls as tls

        current = azure.core.get_subscription()
        example_private_key = tls.index.PrivateKey("example",
            algorithm=RSA,
            rsa_bits=4096)
        example = tls.index.public_key(private_key_pem=example_private_key["privateKeyPem"])
        example_resource_group = azure.core.ResourceGroup("example",
            name="example-resources",
            location="West Europe")
        example_user_assigned_identity = azure.authorization.UserAssignedIdentity("example",
            name="example-uai",
            location=example_resource_group.location,
            resource_group_name=example_resource_group.name)
        example_assignment = azure.authorization.Assignment("example",
            scope=current.id,
            role_definition_name="Azure Center for SAP solutions service role",
            principal_id=example_user_assigned_identity.principal_id)
        example_virtual_network = azure.network.VirtualNetwork("example",
            name="example-vnet",
            address_spaces=["10.0.0.0/16"],
            location=example_resource_group.location,
            resource_group_name=example_resource_group.name)
        example_subnet = azure.network.Subnet("example",
            name="example-subnet",
            resource_group_name=example_resource_group.name,
            virtual_network_name=example_virtual_network.name,
            address_prefixes=["10.0.2.0/24"])
        app = azure.core.ResourceGroup("app",
            name="example-sapapp",
            location="West Europe",
            opts = pulumi.ResourceOptions(depends_on=[example_subnet]))
        example_single_node_virtual_instance = azure.workloadssap.SingleNodeVirtualInstance("example",
            name="X05",
            resource_group_name=example_resource_group.name,
            location=example_resource_group.location,
            environment="NonProd",
            sap_product="S4HANA",
            managed_resource_group_name="managedTestRG",
            app_location=app.location,
            sap_fqdn="sap.bpaas.com",
            single_server_configuration={
                "app_resource_group_name": app.name,
                "subnet_id": example_subnet.id,
                "database_type": "HANA",
                "secondary_ip_enabled": True,
                "virtual_machine_configuration": {
                    "virtual_machine_size": "Standard_E32ds_v4",
                    "image": {
                        "offer": "RHEL-SAP-HA",
                        "publisher": "RedHat",
                        "sku": "82sapha-gen2",
                        "version": "latest",
                    },
                    "os_profile": {
                        "admin_username": "testAdmin",
                        "ssh_private_key": example_private_key["privateKeyPem"],
                        "ssh_public_key": example["publicKeyOpenssh"],
                    },
                },
                "disk_volume_configurations": [
                    {
                        "volume_name": "hana/data",
                        "number_of_disks": 3,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "hana/log",
                        "number_of_disks": 3,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "hana/shared",
                        "number_of_disks": 1,
                        "size_in_gb": 256,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "usr/sap",
                        "number_of_disks": 1,
                        "size_in_gb": 128,
                        "sku_name": "Premium_LRS",
                    },
                    {
                        "volume_name": "backup",
                        "number_of_disks": 2,
                        "size_in_gb": 256,
                        "sku_name": "StandardSSD_LRS",
                    },
                    {
                        "volume_name": "os",
                        "number_of_disks": 1,
                        "size_in_gb": 64,
                        "sku_name": "StandardSSD_LRS",
                    },
                ],
                "virtual_machine_resource_names": {
                    "host_name": "apphostName0",
                    "os_disk_name": "app0osdisk",
                    "virtual_machine_name": "appvm0",
                    "network_interface_names": ["appnic0"],
                    "data_disks": [{
                        "volume_name": "default",
                        "names": ["app0disk0"],
                    }],
                },
            },
            identity={
                "type": "UserAssigned",
                "identity_ids": [example_user_assigned_identity.id],
            },
            opts = pulumi.ResourceOptions(depends_on=[example_assignment]))
        ```

        ## API Providers

        <!-- This section is generated, changes will be overwritten -->
        This resource uses the following Azure API Providers:

        * `Microsoft.Workloads` - 2024-09-01

        ## Import

        SAP Single Node Virtual Instances with new SAP Systems can be imported using the `resource id`, e.g.

        ```sh
        $ pulumi import azure:workloadssap/singleNodeVirtualInstance:SingleNodeVirtualInstance example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.Workloads/sapVirtualInstances/vis1
        ```


        :param str resource_name: The name of the resource.
        :param SingleNodeVirtualInstanceArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(SingleNodeVirtualInstanceArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 app_location: Optional[pulumi.Input[_builtins.str]] = None,
                 environment: Optional[pulumi.Input[_builtins.str]] = None,
                 identity: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceIdentityArgs', 'SingleNodeVirtualInstanceIdentityArgsDict']]] = None,
                 location: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 managed_resources_network_access_type: Optional[pulumi.Input[_builtins.str]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_fqdn: Optional[pulumi.Input[_builtins.str]] = None,
                 sap_product: Optional[pulumi.Input[_builtins.str]] = None,
                 single_server_configuration: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceSingleServerConfigurationArgs', 'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict']]] = None,
                 tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = SingleNodeVirtualInstanceArgs.__new__(SingleNodeVirtualInstanceArgs)

            if app_location is None and not opts.urn:
                raise TypeError("Missing required property 'app_location'")
            __props__.__dict__["app_location"] = app_location
            if environment is None and not opts.urn:
                raise TypeError("Missing required property 'environment'")
            __props__.__dict__["environment"] = environment
            __props__.__dict__["identity"] = identity
            __props__.__dict__["location"] = location
            __props__.__dict__["managed_resource_group_name"] = managed_resource_group_name
            __props__.__dict__["managed_resources_network_access_type"] = managed_resources_network_access_type
            __props__.__dict__["name"] = name
            if resource_group_name is None and not opts.urn:
                raise TypeError("Missing required property 'resource_group_name'")
            __props__.__dict__["resource_group_name"] = resource_group_name
            if sap_fqdn is None and not opts.urn:
                raise TypeError("Missing required property 'sap_fqdn'")
            __props__.__dict__["sap_fqdn"] = sap_fqdn
            if sap_product is None and not opts.urn:
                raise TypeError("Missing required property 'sap_product'")
            __props__.__dict__["sap_product"] = sap_product
            if single_server_configuration is None and not opts.urn:
                raise TypeError("Missing required property 'single_server_configuration'")
            __props__.__dict__["single_server_configuration"] = single_server_configuration
            __props__.__dict__["tags"] = tags
        super(SingleNodeVirtualInstance, __self__).__init__(
            'azure:workloadssap/singleNodeVirtualInstance:SingleNodeVirtualInstance',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            app_location: Optional[pulumi.Input[_builtins.str]] = None,
            environment: Optional[pulumi.Input[_builtins.str]] = None,
            identity: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceIdentityArgs', 'SingleNodeVirtualInstanceIdentityArgsDict']]] = None,
            location: Optional[pulumi.Input[_builtins.str]] = None,
            managed_resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
            managed_resources_network_access_type: Optional[pulumi.Input[_builtins.str]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            resource_group_name: Optional[pulumi.Input[_builtins.str]] = None,
            sap_fqdn: Optional[pulumi.Input[_builtins.str]] = None,
            sap_product: Optional[pulumi.Input[_builtins.str]] = None,
            single_server_configuration: Optional[pulumi.Input[Union['SingleNodeVirtualInstanceSingleServerConfigurationArgs', 'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict']]] = None,
            tags: Optional[pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]]] = None) -> 'SingleNodeVirtualInstance':
        """
        Get an existing SingleNodeVirtualInstance resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] app_location: The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] environment: The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        :param pulumi.Input[Union['SingleNodeVirtualInstanceIdentityArgs', 'SingleNodeVirtualInstanceIdentityArgsDict']] identity: An `identity` block as defined below.
        :param pulumi.Input[_builtins.str] location: The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resource_group_name: The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] managed_resources_network_access_type: The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        :param pulumi.Input[_builtins.str] name: Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] resource_group_name: The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_fqdn: The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        :param pulumi.Input[_builtins.str] sap_product: The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        :param pulumi.Input[Union['SingleNodeVirtualInstanceSingleServerConfigurationArgs', 'SingleNodeVirtualInstanceSingleServerConfigurationArgsDict']] single_server_configuration: A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        :param pulumi.Input[Mapping[str, pulumi.Input[_builtins.str]]] tags: A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _SingleNodeVirtualInstanceState.__new__(_SingleNodeVirtualInstanceState)

        __props__.__dict__["app_location"] = app_location
        __props__.__dict__["environment"] = environment
        __props__.__dict__["identity"] = identity
        __props__.__dict__["location"] = location
        __props__.__dict__["managed_resource_group_name"] = managed_resource_group_name
        __props__.__dict__["managed_resources_network_access_type"] = managed_resources_network_access_type
        __props__.__dict__["name"] = name
        __props__.__dict__["resource_group_name"] = resource_group_name
        __props__.__dict__["sap_fqdn"] = sap_fqdn
        __props__.__dict__["sap_product"] = sap_product
        __props__.__dict__["single_server_configuration"] = single_server_configuration
        __props__.__dict__["tags"] = tags
        return SingleNodeVirtualInstance(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="appLocation")
    def app_location(self) -> pulumi.Output[_builtins.str]:
        """
        The Geo-Location where the SAP system is to be created. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "app_location")

    @_builtins.property
    @pulumi.getter
    def environment(self) -> pulumi.Output[_builtins.str]:
        """
        The environment type for the SAP Single Node Virtual Instance. Possible values are `NonProd` and `Prod`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "environment")

    @_builtins.property
    @pulumi.getter
    def identity(self) -> pulumi.Output[Optional['outputs.SingleNodeVirtualInstanceIdentity']]:
        """
        An `identity` block as defined below.
        """
        return pulumi.get(self, "identity")

    @_builtins.property
    @pulumi.getter
    def location(self) -> pulumi.Output[_builtins.str]:
        """
        The Azure Region where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "location")

    @_builtins.property
    @pulumi.getter(name="managedResourceGroupName")
    def managed_resource_group_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The name of the managed Resource Group for the SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "managed_resource_group_name")

    @_builtins.property
    @pulumi.getter(name="managedResourcesNetworkAccessType")
    def managed_resources_network_access_type(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The network access type for managed resources. Possible values are `Private` and `Public`. Defaults to `Public`.
        """
        return pulumi.get(self, "managed_resources_network_access_type")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        Specifies the name of this SAP Single Node Virtual Instance. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter(name="resourceGroupName")
    def resource_group_name(self) -> pulumi.Output[_builtins.str]:
        """
        The name of the Resource Group where the SAP Single Node Virtual Instance should exist. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "resource_group_name")

    @_builtins.property
    @pulumi.getter(name="sapFqdn")
    def sap_fqdn(self) -> pulumi.Output[_builtins.str]:
        """
        The fully qualified domain name for the SAP system. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_fqdn")

    @_builtins.property
    @pulumi.getter(name="sapProduct")
    def sap_product(self) -> pulumi.Output[_builtins.str]:
        """
        The SAP Product type for the SAP Single Node Virtual Instance. Possible values are `ECC`, `Other` and `S4HANA`. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "sap_product")

    @_builtins.property
    @pulumi.getter(name="singleServerConfiguration")
    def single_server_configuration(self) -> pulumi.Output['outputs.SingleNodeVirtualInstanceSingleServerConfiguration']:
        """
        A `single_server_configuration` block as defined below. Changing this forces a new resource to be created.
        """
        return pulumi.get(self, "single_server_configuration")

    @_builtins.property
    @pulumi.getter
    def tags(self) -> pulumi.Output[Optional[Mapping[str, _builtins.str]]]:
        """
        A mapping of tags which should be assigned to the SAP Single Node Virtual Instance.
        """
        return pulumi.get(self, "tags")

