# 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__ = [
    'AccessApprovalSettingsEnrolledServiceArgs',
    'IAMBindingConditionArgs',
    'IAMMemberConditionArgs',
    'IamAuditConfigAuditLogConfigArgs',
    'OrganizationPolicyBooleanPolicyArgs',
    'OrganizationPolicyListPolicyArgs',
    'OrganizationPolicyListPolicyAllowArgs',
    'OrganizationPolicyListPolicyDenyArgs',
    'OrganizationPolicyRestorePolicyArgs',
]

@pulumi.input_type
class AccessApprovalSettingsEnrolledServiceArgs:
    def __init__(__self__, *,
                 cloud_product: pulumi.Input[str],
                 enrollment_level: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] cloud_product: The product for which Access Approval will be enrolled. Allowed values are listed (case-sensitive):
               * all
               * App Engine
               * BigQuery
               * Cloud Bigtable
               * Cloud Key Management Service
               * Compute Engine
               * Cloud Dataflow
               * Cloud Identity and Access Management
               * Cloud Pub/Sub
               * Cloud Storage
               * Persistent Disk
               Note: These values are supported as input, but considered a legacy format:
               * all
               * appengine.googleapis.com
               * bigquery.googleapis.com
               * bigtable.googleapis.com
               * cloudkms.googleapis.com
               * compute.googleapis.com
               * dataflow.googleapis.com
               * iam.googleapis.com
               * pubsub.googleapis.com
               * storage.googleapis.com
        :param pulumi.Input[str] enrollment_level: The enrollment level of the service.
               Default value is `BLOCK_ALL`.
               Possible values are: `BLOCK_ALL`.
               
               - - -
        """
        pulumi.set(__self__, "cloud_product", cloud_product)
        if enrollment_level is not None:
            pulumi.set(__self__, "enrollment_level", enrollment_level)

    @property
    @pulumi.getter(name="cloudProduct")
    def cloud_product(self) -> pulumi.Input[str]:
        """
        The product for which Access Approval will be enrolled. Allowed values are listed (case-sensitive):
        * all
        * App Engine
        * BigQuery
        * Cloud Bigtable
        * Cloud Key Management Service
        * Compute Engine
        * Cloud Dataflow
        * Cloud Identity and Access Management
        * Cloud Pub/Sub
        * Cloud Storage
        * Persistent Disk
        Note: These values are supported as input, but considered a legacy format:
        * all
        * appengine.googleapis.com
        * bigquery.googleapis.com
        * bigtable.googleapis.com
        * cloudkms.googleapis.com
        * compute.googleapis.com
        * dataflow.googleapis.com
        * iam.googleapis.com
        * pubsub.googleapis.com
        * storage.googleapis.com
        """
        return pulumi.get(self, "cloud_product")

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

    @property
    @pulumi.getter(name="enrollmentLevel")
    def enrollment_level(self) -> Optional[pulumi.Input[str]]:
        """
        The enrollment level of the service.
        Default value is `BLOCK_ALL`.
        Possible values are: `BLOCK_ALL`.

        - - -
        """
        return pulumi.get(self, "enrollment_level")

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


@pulumi.input_type
class IAMBindingConditionArgs:
    def __init__(__self__, *,
                 expression: pulumi.Input[str],
                 title: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None):
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> pulumi.Input[str]:
        return pulumi.get(self, "expression")

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

    @property
    @pulumi.getter
    def title(self) -> pulumi.Input[str]:
        return pulumi.get(self, "title")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        return pulumi.get(self, "description")

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


@pulumi.input_type
class IAMMemberConditionArgs:
    def __init__(__self__, *,
                 expression: pulumi.Input[str],
                 title: pulumi.Input[str],
                 description: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input[str] expression: Textual representation of an expression in Common Expression Language syntax.
        :param pulumi.Input[str] title: A title for the expression, i.e. a short string describing its purpose.
        :param pulumi.Input[str] description: An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.
               
               > **Warning:** This provider considers the `role` and condition contents (`title`+`description`+`expression`) as the
               identifier for the binding. This means that if any part of the condition is changed out-of-band, the provider will
               consider it to be an entirely different resource and will treat it as such.
        """
        pulumi.set(__self__, "expression", expression)
        pulumi.set(__self__, "title", title)
        if description is not None:
            pulumi.set(__self__, "description", description)

    @property
    @pulumi.getter
    def expression(self) -> pulumi.Input[str]:
        """
        Textual representation of an expression in Common Expression Language syntax.
        """
        return pulumi.get(self, "expression")

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

    @property
    @pulumi.getter
    def title(self) -> pulumi.Input[str]:
        """
        A title for the expression, i.e. a short string describing its purpose.
        """
        return pulumi.get(self, "title")

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

    @property
    @pulumi.getter
    def description(self) -> Optional[pulumi.Input[str]]:
        """
        An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.

        > **Warning:** This provider considers the `role` and condition contents (`title`+`description`+`expression`) as the
        identifier for the binding. This means that if any part of the condition is changed out-of-band, the provider will
        consider it to be an entirely different resource and will treat it as such.
        """
        return pulumi.get(self, "description")

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


@pulumi.input_type
class IamAuditConfigAuditLogConfigArgs:
    def __init__(__self__, *,
                 log_type: pulumi.Input[str],
                 exempted_members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[str] log_type: Permission type for which logging is to be configured.  Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] exempted_members: Identities that do not cause logging for this type of permission.  The format is the same as that for `members`.
        """
        pulumi.set(__self__, "log_type", log_type)
        if exempted_members is not None:
            pulumi.set(__self__, "exempted_members", exempted_members)

    @property
    @pulumi.getter(name="logType")
    def log_type(self) -> pulumi.Input[str]:
        """
        Permission type for which logging is to be configured.  Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`.
        """
        return pulumi.get(self, "log_type")

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

    @property
    @pulumi.getter(name="exemptedMembers")
    def exempted_members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        Identities that do not cause logging for this type of permission.  The format is the same as that for `members`.
        """
        return pulumi.get(self, "exempted_members")

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


@pulumi.input_type
class OrganizationPolicyBooleanPolicyArgs:
    def __init__(__self__, *,
                 enforced: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] enforced: If true, then the Policy is enforced. If false, then any configuration is acceptable.
        """
        pulumi.set(__self__, "enforced", enforced)

    @property
    @pulumi.getter
    def enforced(self) -> pulumi.Input[bool]:
        """
        If true, then the Policy is enforced. If false, then any configuration is acceptable.
        """
        return pulumi.get(self, "enforced")

    @enforced.setter
    def enforced(self, value: pulumi.Input[bool]):
        pulumi.set(self, "enforced", value)


@pulumi.input_type
class OrganizationPolicyListPolicyArgs:
    def __init__(__self__, *,
                 allow: Optional[pulumi.Input['OrganizationPolicyListPolicyAllowArgs']] = None,
                 deny: Optional[pulumi.Input['OrganizationPolicyListPolicyDenyArgs']] = None,
                 inherit_from_parent: Optional[pulumi.Input[bool]] = None,
                 suggested_value: Optional[pulumi.Input[str]] = None):
        """
        :param pulumi.Input['OrganizationPolicyListPolicyAllowArgs'] allow: or `deny` - (Optional) One or the other must be set.
        :param pulumi.Input[bool] inherit_from_parent: If set to true, the values from the effective Policy of the parent resource
               are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.
               
               The `allow` or `deny` blocks support:
        :param pulumi.Input[str] suggested_value: The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
        """
        if allow is not None:
            pulumi.set(__self__, "allow", allow)
        if deny is not None:
            pulumi.set(__self__, "deny", deny)
        if inherit_from_parent is not None:
            pulumi.set(__self__, "inherit_from_parent", inherit_from_parent)
        if suggested_value is not None:
            pulumi.set(__self__, "suggested_value", suggested_value)

    @property
    @pulumi.getter
    def allow(self) -> Optional[pulumi.Input['OrganizationPolicyListPolicyAllowArgs']]:
        """
        or `deny` - (Optional) One or the other must be set.
        """
        return pulumi.get(self, "allow")

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

    @property
    @pulumi.getter
    def deny(self) -> Optional[pulumi.Input['OrganizationPolicyListPolicyDenyArgs']]:
        return pulumi.get(self, "deny")

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

    @property
    @pulumi.getter(name="inheritFromParent")
    def inherit_from_parent(self) -> Optional[pulumi.Input[bool]]:
        """
        If set to true, the values from the effective Policy of the parent resource
        are inherited, meaning the values set in this Policy are added to the values inherited up the hierarchy.

        The `allow` or `deny` blocks support:
        """
        return pulumi.get(self, "inherit_from_parent")

    @inherit_from_parent.setter
    def inherit_from_parent(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "inherit_from_parent", value)

    @property
    @pulumi.getter(name="suggestedValue")
    def suggested_value(self) -> Optional[pulumi.Input[str]]:
        """
        The Google Cloud Console will try to default to a configuration that matches the value specified in this field.
        """
        return pulumi.get(self, "suggested_value")

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


@pulumi.input_type
class OrganizationPolicyListPolicyAllowArgs:
    def __init__(__self__, *,
                 all: Optional[pulumi.Input[bool]] = None,
                 values: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[bool] all: The policy allows or denies all values.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] values: The policy can define specific values that are allowed or denied.
        """
        if all is not None:
            pulumi.set(__self__, "all", all)
        if values is not None:
            pulumi.set(__self__, "values", values)

    @property
    @pulumi.getter
    def all(self) -> Optional[pulumi.Input[bool]]:
        """
        The policy allows or denies all values.
        """
        return pulumi.get(self, "all")

    @all.setter
    def all(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "all", value)

    @property
    @pulumi.getter
    def values(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The policy can define specific values that are allowed or denied.
        """
        return pulumi.get(self, "values")

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


@pulumi.input_type
class OrganizationPolicyListPolicyDenyArgs:
    def __init__(__self__, *,
                 all: Optional[pulumi.Input[bool]] = None,
                 values: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        :param pulumi.Input[bool] all: The policy allows or denies all values.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] values: The policy can define specific values that are allowed or denied.
        """
        if all is not None:
            pulumi.set(__self__, "all", all)
        if values is not None:
            pulumi.set(__self__, "values", values)

    @property
    @pulumi.getter
    def all(self) -> Optional[pulumi.Input[bool]]:
        """
        The policy allows or denies all values.
        """
        return pulumi.get(self, "all")

    @all.setter
    def all(self, value: Optional[pulumi.Input[bool]]):
        pulumi.set(self, "all", value)

    @property
    @pulumi.getter
    def values(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        The policy can define specific values that are allowed or denied.
        """
        return pulumi.get(self, "values")

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


@pulumi.input_type
class OrganizationPolicyRestorePolicyArgs:
    def __init__(__self__, *,
                 default: pulumi.Input[bool]):
        """
        :param pulumi.Input[bool] default: May only be set to true. If set, then the default Policy is restored.
        """
        pulumi.set(__self__, "default", default)

    @property
    @pulumi.getter
    def default(self) -> pulumi.Input[bool]:
        """
        May only be set to true. If set, then the default Policy is restored.
        """
        return pulumi.get(self, "default")

    @default.setter
    def default(self, value: pulumi.Input[bool]):
        pulumi.set(self, "default", value)


