# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import copy
import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities

__all__ = [
    'GetUsersResult',
    'AwaitableGetUsersResult',
    'get_users',
    'get_users_output',
]

@pulumi.output_type
class GetUsersResult:
    """
    A collection of values returned by getUsers.
    """
    def __init__(__self__, comments=None, emails=None, enableds=None, expiration_dates=None, first_names=None, groups=None, id=None, keys=None, last_names=None, user_ids=None):
        if comments and not isinstance(comments, list):
            raise TypeError("Expected argument 'comments' to be a list")
        pulumi.set(__self__, "comments", comments)
        if emails and not isinstance(emails, list):
            raise TypeError("Expected argument 'emails' to be a list")
        pulumi.set(__self__, "emails", emails)
        if enableds and not isinstance(enableds, list):
            raise TypeError("Expected argument 'enableds' to be a list")
        pulumi.set(__self__, "enableds", enableds)
        if expiration_dates and not isinstance(expiration_dates, list):
            raise TypeError("Expected argument 'expiration_dates' to be a list")
        pulumi.set(__self__, "expiration_dates", expiration_dates)
        if first_names and not isinstance(first_names, list):
            raise TypeError("Expected argument 'first_names' to be a list")
        pulumi.set(__self__, "first_names", first_names)
        if groups and not isinstance(groups, list):
            raise TypeError("Expected argument 'groups' to be a list")
        pulumi.set(__self__, "groups", groups)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if keys and not isinstance(keys, list):
            raise TypeError("Expected argument 'keys' to be a list")
        pulumi.set(__self__, "keys", keys)
        if last_names and not isinstance(last_names, list):
            raise TypeError("Expected argument 'last_names' to be a list")
        pulumi.set(__self__, "last_names", last_names)
        if user_ids and not isinstance(user_ids, list):
            raise TypeError("Expected argument 'user_ids' to be a list")
        pulumi.set(__self__, "user_ids", user_ids)

    @property
    @pulumi.getter
    def comments(self) -> Sequence[str]:
        """
        The user comments.
        """
        return pulumi.get(self, "comments")

    @property
    @pulumi.getter
    def emails(self) -> Sequence[str]:
        """
        The users' email addresses.
        """
        return pulumi.get(self, "emails")

    @property
    @pulumi.getter
    def enableds(self) -> Sequence[bool]:
        """
        Whether a user account is enabled.
        """
        return pulumi.get(self, "enableds")

    @property
    @pulumi.getter(name="expirationDates")
    def expiration_dates(self) -> Sequence[str]:
        """
        The user accounts' expiration dates (RFC 3339).
        """
        return pulumi.get(self, "expiration_dates")

    @property
    @pulumi.getter(name="firstNames")
    def first_names(self) -> Sequence[str]:
        """
        The users' first names.
        """
        return pulumi.get(self, "first_names")

    @property
    @pulumi.getter
    def groups(self) -> Sequence[Sequence[str]]:
        """
        The users' groups.
        """
        return pulumi.get(self, "groups")

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

    @property
    @pulumi.getter
    def keys(self) -> Sequence[str]:
        """
        The users' keys.
        """
        return pulumi.get(self, "keys")

    @property
    @pulumi.getter(name="lastNames")
    def last_names(self) -> Sequence[str]:
        """
        The users' last names.
        """
        return pulumi.get(self, "last_names")

    @property
    @pulumi.getter(name="userIds")
    def user_ids(self) -> Sequence[str]:
        """
        The user identifiers.
        """
        return pulumi.get(self, "user_ids")


class AwaitableGetUsersResult(GetUsersResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetUsersResult(
            comments=self.comments,
            emails=self.emails,
            enableds=self.enableds,
            expiration_dates=self.expiration_dates,
            first_names=self.first_names,
            groups=self.groups,
            id=self.id,
            keys=self.keys,
            last_names=self.last_names,
            user_ids=self.user_ids)


def get_users(opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetUsersResult:
    """
    Retrieves information about all the available users.

    ## Example Usage

    <!--Start PulumiCodeChooser -->
    ```python
    import pulumi
    import pulumi_proxmoxve as proxmoxve

    available_users = proxmoxve.Permission.get_users()
    ```
    <!--End PulumiCodeChooser -->
    """
    __args__ = dict()
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('proxmoxve:Permission/getUsers:getUsers', __args__, opts=opts, typ=GetUsersResult).value

    return AwaitableGetUsersResult(
        comments=pulumi.get(__ret__, 'comments'),
        emails=pulumi.get(__ret__, 'emails'),
        enableds=pulumi.get(__ret__, 'enableds'),
        expiration_dates=pulumi.get(__ret__, 'expiration_dates'),
        first_names=pulumi.get(__ret__, 'first_names'),
        groups=pulumi.get(__ret__, 'groups'),
        id=pulumi.get(__ret__, 'id'),
        keys=pulumi.get(__ret__, 'keys'),
        last_names=pulumi.get(__ret__, 'last_names'),
        user_ids=pulumi.get(__ret__, 'user_ids'))


@_utilities.lift_output_func(get_users)
def get_users_output(opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetUsersResult]:
    """
    Retrieves information about all the available users.

    ## Example Usage

    <!--Start PulumiCodeChooser -->
    ```python
    import pulumi
    import pulumi_proxmoxve as proxmoxve

    available_users = proxmoxve.Permission.get_users()
    ```
    <!--End PulumiCodeChooser -->
    """
    ...
