# 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

__all__ = [
    'GetDatabaseSystemVersionsResult',
    'AwaitableGetDatabaseSystemVersionsResult',
    'get_database_system_versions',
    'get_database_system_versions_output',
]

@pulumi.output_type
class GetDatabaseSystemVersionsResult:
    """
    A collection of values returned by getDatabaseSystemVersions.
    """
    def __init__(__self__, database_software_image_supported=None, database_system_shape=None, id=None, location=None, shape_family=None, storage_management=None, upgrade_supported=None, versions=None):
        if database_software_image_supported and not isinstance(database_software_image_supported, bool):
            raise TypeError("Expected argument 'database_software_image_supported' to be a bool")
        pulumi.set(__self__, "database_software_image_supported", database_software_image_supported)
        if database_system_shape and not isinstance(database_system_shape, str):
            raise TypeError("Expected argument 'database_system_shape' to be a str")
        pulumi.set(__self__, "database_system_shape", database_system_shape)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if location and not isinstance(location, str):
            raise TypeError("Expected argument 'location' to be a str")
        pulumi.set(__self__, "location", location)
        if shape_family and not isinstance(shape_family, str):
            raise TypeError("Expected argument 'shape_family' to be a str")
        pulumi.set(__self__, "shape_family", shape_family)
        if storage_management and not isinstance(storage_management, str):
            raise TypeError("Expected argument 'storage_management' to be a str")
        pulumi.set(__self__, "storage_management", storage_management)
        if upgrade_supported and not isinstance(upgrade_supported, bool):
            raise TypeError("Expected argument 'upgrade_supported' to be a bool")
        pulumi.set(__self__, "upgrade_supported", upgrade_supported)
        if versions and not isinstance(versions, list):
            raise TypeError("Expected argument 'versions' to be a list")
        pulumi.set(__self__, "versions", versions)

    @_builtins.property
    @pulumi.getter(name="databaseSoftwareImageSupported")
    def database_software_image_supported(self) -> Optional[_builtins.bool]:
        return pulumi.get(self, "database_software_image_supported")

    @_builtins.property
    @pulumi.getter(name="databaseSystemShape")
    def database_system_shape(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "database_system_shape")

    @_builtins.property
    @pulumi.getter
    def id(self) -> _builtins.str:
        """
        The provider-assigned unique ID for this managed resource.
        """
        return pulumi.get(self, "id")

    @_builtins.property
    @pulumi.getter
    def location(self) -> _builtins.str:
        return pulumi.get(self, "location")

    @_builtins.property
    @pulumi.getter(name="shapeFamily")
    def shape_family(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "shape_family")

    @_builtins.property
    @pulumi.getter(name="storageManagement")
    def storage_management(self) -> Optional[_builtins.str]:
        return pulumi.get(self, "storage_management")

    @_builtins.property
    @pulumi.getter(name="upgradeSupported")
    def upgrade_supported(self) -> Optional[_builtins.bool]:
        return pulumi.get(self, "upgrade_supported")

    @_builtins.property
    @pulumi.getter
    def versions(self) -> Sequence['outputs.GetDatabaseSystemVersionsVersionResult']:
        """
        A `versions` block as defined below.
        """
        return pulumi.get(self, "versions")


class AwaitableGetDatabaseSystemVersionsResult(GetDatabaseSystemVersionsResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetDatabaseSystemVersionsResult(
            database_software_image_supported=self.database_software_image_supported,
            database_system_shape=self.database_system_shape,
            id=self.id,
            location=self.location,
            shape_family=self.shape_family,
            storage_management=self.storage_management,
            upgrade_supported=self.upgrade_supported,
            versions=self.versions)


def get_database_system_versions(database_software_image_supported: Optional[_builtins.bool] = None,
                                 database_system_shape: Optional[_builtins.str] = None,
                                 location: Optional[_builtins.str] = None,
                                 shape_family: Optional[_builtins.str] = None,
                                 storage_management: Optional[_builtins.str] = None,
                                 upgrade_supported: Optional[_builtins.bool] = None,
                                 opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetDatabaseSystemVersionsResult:
    """
    Use this data source to access information about existing Oracle Database Systems Versions.

    ## Example Usage

    ```python
    import pulumi
    import pulumi_azure as azure

    example = azure.oracle.get_database_system_versions(location="eastus")
    pulumi.export("id", example.id)
    ```

    ## API Providers

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

    * `Oracle.Database` - 2025-09-01


    :param _builtins.bool database_software_image_supported: Whether to filter the results to the set of Oracle Database versions that are supported for the database software images.
    :param _builtins.str database_system_shape: If provided, filters the results to the set of database versions which are supported for the given shape. The only possible value is `VM.Standard.x86`.
    :param _builtins.str location: The Azure Region to query for the Oracle Database Systems Versions.
    :param _builtins.str shape_family: If provided, filters the results to the set of database versions which are supported for the given shape family. Possible values are `EXADATA`, `EXADB_XS`, `SINGLENODE` and `VIRTUALMACHINE`.
    :param _builtins.str storage_management: The database system storage management option. Used to list database versions available for that storage manager. The only possible value is `LVM`.
    :param _builtins.bool upgrade_supported: Whether to filter the results to the set of database versions which are supported for upgrade.
    """
    __args__ = dict()
    __args__['databaseSoftwareImageSupported'] = database_software_image_supported
    __args__['databaseSystemShape'] = database_system_shape
    __args__['location'] = location
    __args__['shapeFamily'] = shape_family
    __args__['storageManagement'] = storage_management
    __args__['upgradeSupported'] = upgrade_supported
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('azure:oracle/getDatabaseSystemVersions:getDatabaseSystemVersions', __args__, opts=opts, typ=GetDatabaseSystemVersionsResult).value

    return AwaitableGetDatabaseSystemVersionsResult(
        database_software_image_supported=pulumi.get(__ret__, 'database_software_image_supported'),
        database_system_shape=pulumi.get(__ret__, 'database_system_shape'),
        id=pulumi.get(__ret__, 'id'),
        location=pulumi.get(__ret__, 'location'),
        shape_family=pulumi.get(__ret__, 'shape_family'),
        storage_management=pulumi.get(__ret__, 'storage_management'),
        upgrade_supported=pulumi.get(__ret__, 'upgrade_supported'),
        versions=pulumi.get(__ret__, 'versions'))
def get_database_system_versions_output(database_software_image_supported: Optional[pulumi.Input[Optional[_builtins.bool]]] = None,
                                        database_system_shape: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
                                        location: Optional[pulumi.Input[_builtins.str]] = None,
                                        shape_family: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
                                        storage_management: Optional[pulumi.Input[Optional[_builtins.str]]] = None,
                                        upgrade_supported: Optional[pulumi.Input[Optional[_builtins.bool]]] = None,
                                        opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetDatabaseSystemVersionsResult]:
    """
    Use this data source to access information about existing Oracle Database Systems Versions.

    ## Example Usage

    ```python
    import pulumi
    import pulumi_azure as azure

    example = azure.oracle.get_database_system_versions(location="eastus")
    pulumi.export("id", example.id)
    ```

    ## API Providers

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

    * `Oracle.Database` - 2025-09-01


    :param _builtins.bool database_software_image_supported: Whether to filter the results to the set of Oracle Database versions that are supported for the database software images.
    :param _builtins.str database_system_shape: If provided, filters the results to the set of database versions which are supported for the given shape. The only possible value is `VM.Standard.x86`.
    :param _builtins.str location: The Azure Region to query for the Oracle Database Systems Versions.
    :param _builtins.str shape_family: If provided, filters the results to the set of database versions which are supported for the given shape family. Possible values are `EXADATA`, `EXADB_XS`, `SINGLENODE` and `VIRTUALMACHINE`.
    :param _builtins.str storage_management: The database system storage management option. Used to list database versions available for that storage manager. The only possible value is `LVM`.
    :param _builtins.bool upgrade_supported: Whether to filter the results to the set of database versions which are supported for upgrade.
    """
    __args__ = dict()
    __args__['databaseSoftwareImageSupported'] = database_software_image_supported
    __args__['databaseSystemShape'] = database_system_shape
    __args__['location'] = location
    __args__['shapeFamily'] = shape_family
    __args__['storageManagement'] = storage_management
    __args__['upgradeSupported'] = upgrade_supported
    opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke_output('azure:oracle/getDatabaseSystemVersions:getDatabaseSystemVersions', __args__, opts=opts, typ=GetDatabaseSystemVersionsResult)
    return __ret__.apply(lambda __response__: GetDatabaseSystemVersionsResult(
        database_software_image_supported=pulumi.get(__response__, 'database_software_image_supported'),
        database_system_shape=pulumi.get(__response__, 'database_system_shape'),
        id=pulumi.get(__response__, 'id'),
        location=pulumi.get(__response__, 'location'),
        shape_family=pulumi.get(__response__, 'shape_family'),
        storage_management=pulumi.get(__response__, 'storage_management'),
        upgrade_supported=pulumi.get(__response__, 'upgrade_supported'),
        versions=pulumi.get(__response__, 'versions')))
