# 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__ = ['ProviderArgs', 'Provider']

@pulumi.input_type
class ProviderArgs:
    def __init__(__self__, *,
                 auth: Optional[pulumi.Input[str]] = None,
                 config_file_profile: Optional[pulumi.Input[str]] = None,
                 disable_auto_retries: Optional[pulumi.Input[bool]] = None,
                 fingerprint: Optional[pulumi.Input[str]] = None,
                 ignore_defined_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_key: Optional[pulumi.Input[str]] = None,
                 private_key_password: Optional[pulumi.Input[str]] = None,
                 private_key_path: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 retry_duration_seconds: Optional[pulumi.Input[int]] = None,
                 tenancy_ocid: Optional[pulumi.Input[str]] = None,
                 user_ocid: Optional[pulumi.Input[str]] = None):
        """
        The set of arguments for constructing a Provider resource.
        :param pulumi.Input[str] auth: (Optional) The type of auth to use. Options are 'ApiKey', 'SecurityToken' and 'InstancePrincipal' and
               'ResourcePrincipal'. By default, 'ApiKey' will be used.
        :param pulumi.Input[str] config_file_profile: (Optional) The profile name to be used from config file, if not set it will be DEFAULT.
        :param pulumi.Input[bool] disable_auto_retries: (Optional) Disable automatic retries for retriable errors. Automatic retries were introduced to solve some eventual
               consistency problems but it also introduced performance issues on destroy operations.
        :param pulumi.Input[str] fingerprint: (Optional) The fingerprint for the user's RSA key. This can be found in user settings in the Oracle Cloud Infrastructure
               console. Required if auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignore_defined_tags: (Optional) List of defined tags keys that Terraform should ignore when planning creates and updates to the associated
               remote object
        :param pulumi.Input[str] private_key: (Optional) A PEM formatted RSA private key for the user. A private_key or a private_key_path must be provided if auth is
               set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] private_key_password: (Optional) The password used to secure the private key.
        :param pulumi.Input[str] private_key_path: (Optional) The path to the user's PEM formatted private key. A private_key or a private_key_path must be provided if
               auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] region: (Required) The region for API connections (e.g. us-ashburn-1).
        :param pulumi.Input[int] retry_duration_seconds: (Optional) The minimum duration (in seconds) to retry a resource operation in response to an error. The actual retry
               duration may be longer due to jittering of retry operations. This value is ignored if the `disable_auto_retries` field
               is set to true.
        :param pulumi.Input[str] tenancy_ocid: (Optional) The tenancy OCID for a user. The tenancy OCID can be found at the bottom of user settings in the Oracle Cloud
               Infrastructure console. Required if auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] user_ocid: (Optional) The user OCID. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if
               auth is set to 'ApiKey', ignored otherwise.
        """
        if auth is not None:
            pulumi.set(__self__, "auth", auth)
        if config_file_profile is not None:
            pulumi.set(__self__, "config_file_profile", config_file_profile)
        if disable_auto_retries is not None:
            pulumi.set(__self__, "disable_auto_retries", disable_auto_retries)
        if fingerprint is not None:
            pulumi.set(__self__, "fingerprint", fingerprint)
        if ignore_defined_tags is not None:
            pulumi.set(__self__, "ignore_defined_tags", ignore_defined_tags)
        if private_key is not None:
            pulumi.set(__self__, "private_key", private_key)
        if private_key_password is not None:
            pulumi.set(__self__, "private_key_password", private_key_password)
        if private_key_path is not None:
            pulumi.set(__self__, "private_key_path", private_key_path)
        if region is not None:
            pulumi.set(__self__, "region", region)
        if retry_duration_seconds is not None:
            pulumi.set(__self__, "retry_duration_seconds", retry_duration_seconds)
        if tenancy_ocid is not None:
            pulumi.set(__self__, "tenancy_ocid", tenancy_ocid)
        if user_ocid is not None:
            pulumi.set(__self__, "user_ocid", user_ocid)

    @property
    @pulumi.getter
    def auth(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The type of auth to use. Options are 'ApiKey', 'SecurityToken' and 'InstancePrincipal' and
        'ResourcePrincipal'. By default, 'ApiKey' will be used.
        """
        return pulumi.get(self, "auth")

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

    @property
    @pulumi.getter(name="configFileProfile")
    def config_file_profile(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The profile name to be used from config file, if not set it will be DEFAULT.
        """
        return pulumi.get(self, "config_file_profile")

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

    @property
    @pulumi.getter(name="disableAutoRetries")
    def disable_auto_retries(self) -> Optional[pulumi.Input[bool]]:
        """
        (Optional) Disable automatic retries for retriable errors. Automatic retries were introduced to solve some eventual
        consistency problems but it also introduced performance issues on destroy operations.
        """
        return pulumi.get(self, "disable_auto_retries")

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

    @property
    @pulumi.getter
    def fingerprint(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The fingerprint for the user's RSA key. This can be found in user settings in the Oracle Cloud Infrastructure
        console. Required if auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "fingerprint")

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

    @property
    @pulumi.getter(name="ignoreDefinedTags")
    def ignore_defined_tags(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]:
        """
        (Optional) List of defined tags keys that Terraform should ignore when planning creates and updates to the associated
        remote object
        """
        return pulumi.get(self, "ignore_defined_tags")

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

    @property
    @pulumi.getter(name="privateKey")
    def private_key(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) A PEM formatted RSA private key for the user. A private_key or a private_key_path must be provided if auth is
        set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "private_key")

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

    @property
    @pulumi.getter(name="privateKeyPassword")
    def private_key_password(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The password used to secure the private key.
        """
        return pulumi.get(self, "private_key_password")

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

    @property
    @pulumi.getter(name="privateKeyPath")
    def private_key_path(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The path to the user's PEM formatted private key. A private_key or a private_key_path must be provided if
        auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "private_key_path")

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

    @property
    @pulumi.getter
    def region(self) -> Optional[pulumi.Input[str]]:
        """
        (Required) The region for API connections (e.g. us-ashburn-1).
        """
        return pulumi.get(self, "region")

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

    @property
    @pulumi.getter(name="retryDurationSeconds")
    def retry_duration_seconds(self) -> Optional[pulumi.Input[int]]:
        """
        (Optional) The minimum duration (in seconds) to retry a resource operation in response to an error. The actual retry
        duration may be longer due to jittering of retry operations. This value is ignored if the `disable_auto_retries` field
        is set to true.
        """
        return pulumi.get(self, "retry_duration_seconds")

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

    @property
    @pulumi.getter(name="tenancyOcid")
    def tenancy_ocid(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The tenancy OCID for a user. The tenancy OCID can be found at the bottom of user settings in the Oracle Cloud
        Infrastructure console. Required if auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "tenancy_ocid")

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

    @property
    @pulumi.getter(name="userOcid")
    def user_ocid(self) -> Optional[pulumi.Input[str]]:
        """
        (Optional) The user OCID. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if
        auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "user_ocid")

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


class Provider(pulumi.ProviderResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 auth: Optional[pulumi.Input[str]] = None,
                 config_file_profile: Optional[pulumi.Input[str]] = None,
                 disable_auto_retries: Optional[pulumi.Input[bool]] = None,
                 fingerprint: Optional[pulumi.Input[str]] = None,
                 ignore_defined_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_key: Optional[pulumi.Input[str]] = None,
                 private_key_password: Optional[pulumi.Input[str]] = None,
                 private_key_path: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 retry_duration_seconds: Optional[pulumi.Input[int]] = None,
                 tenancy_ocid: Optional[pulumi.Input[str]] = None,
                 user_ocid: Optional[pulumi.Input[str]] = None,
                 __props__=None):
        """
        The provider type for the oci package. By default, resources use package-wide configuration
        settings, however an explicit `Provider` instance may be created and passed during resource
        construction to achieve fine-grained programmatic control over provider settings. See the
        [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[str] auth: (Optional) The type of auth to use. Options are 'ApiKey', 'SecurityToken' and 'InstancePrincipal' and
               'ResourcePrincipal'. By default, 'ApiKey' will be used.
        :param pulumi.Input[str] config_file_profile: (Optional) The profile name to be used from config file, if not set it will be DEFAULT.
        :param pulumi.Input[bool] disable_auto_retries: (Optional) Disable automatic retries for retriable errors. Automatic retries were introduced to solve some eventual
               consistency problems but it also introduced performance issues on destroy operations.
        :param pulumi.Input[str] fingerprint: (Optional) The fingerprint for the user's RSA key. This can be found in user settings in the Oracle Cloud Infrastructure
               console. Required if auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[Sequence[pulumi.Input[str]]] ignore_defined_tags: (Optional) List of defined tags keys that Terraform should ignore when planning creates and updates to the associated
               remote object
        :param pulumi.Input[str] private_key: (Optional) A PEM formatted RSA private key for the user. A private_key or a private_key_path must be provided if auth is
               set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] private_key_password: (Optional) The password used to secure the private key.
        :param pulumi.Input[str] private_key_path: (Optional) The path to the user's PEM formatted private key. A private_key or a private_key_path must be provided if
               auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] region: (Required) The region for API connections (e.g. us-ashburn-1).
        :param pulumi.Input[int] retry_duration_seconds: (Optional) The minimum duration (in seconds) to retry a resource operation in response to an error. The actual retry
               duration may be longer due to jittering of retry operations. This value is ignored if the `disable_auto_retries` field
               is set to true.
        :param pulumi.Input[str] tenancy_ocid: (Optional) The tenancy OCID for a user. The tenancy OCID can be found at the bottom of user settings in the Oracle Cloud
               Infrastructure console. Required if auth is set to 'ApiKey', ignored otherwise.
        :param pulumi.Input[str] user_ocid: (Optional) The user OCID. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if
               auth is set to 'ApiKey', ignored otherwise.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: Optional[ProviderArgs] = None,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        The provider type for the oci package. By default, resources use package-wide configuration
        settings, however an explicit `Provider` instance may be created and passed during resource
        construction to achieve fine-grained programmatic control over provider settings. See the
        [documentation](https://www.pulumi.com/docs/reference/programming-model/#providers) for more information.

        :param str resource_name: The name of the resource.
        :param ProviderArgs 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(ProviderArgs, 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,
                 auth: Optional[pulumi.Input[str]] = None,
                 config_file_profile: Optional[pulumi.Input[str]] = None,
                 disable_auto_retries: Optional[pulumi.Input[bool]] = None,
                 fingerprint: Optional[pulumi.Input[str]] = None,
                 ignore_defined_tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 private_key: Optional[pulumi.Input[str]] = None,
                 private_key_password: Optional[pulumi.Input[str]] = None,
                 private_key_path: Optional[pulumi.Input[str]] = None,
                 region: Optional[pulumi.Input[str]] = None,
                 retry_duration_seconds: Optional[pulumi.Input[int]] = None,
                 tenancy_ocid: Optional[pulumi.Input[str]] = None,
                 user_ocid: Optional[pulumi.Input[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__ = ProviderArgs.__new__(ProviderArgs)

            __props__.__dict__["auth"] = auth
            __props__.__dict__["config_file_profile"] = config_file_profile
            __props__.__dict__["disable_auto_retries"] = pulumi.Output.from_input(disable_auto_retries).apply(pulumi.runtime.to_json) if disable_auto_retries is not None else None
            __props__.__dict__["fingerprint"] = fingerprint
            __props__.__dict__["ignore_defined_tags"] = pulumi.Output.from_input(ignore_defined_tags).apply(pulumi.runtime.to_json) if ignore_defined_tags is not None else None
            __props__.__dict__["private_key"] = None if private_key is None else pulumi.Output.secret(private_key)
            __props__.__dict__["private_key_password"] = None if private_key_password is None else pulumi.Output.secret(private_key_password)
            __props__.__dict__["private_key_path"] = private_key_path
            __props__.__dict__["region"] = region
            __props__.__dict__["retry_duration_seconds"] = pulumi.Output.from_input(retry_duration_seconds).apply(pulumi.runtime.to_json) if retry_duration_seconds is not None else None
            __props__.__dict__["tenancy_ocid"] = tenancy_ocid
            __props__.__dict__["user_ocid"] = user_ocid
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["privateKey", "privateKeyPassword"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(Provider, __self__).__init__(
            'oci',
            resource_name,
            __props__,
            opts)

    @property
    @pulumi.getter
    def auth(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The type of auth to use. Options are 'ApiKey', 'SecurityToken' and 'InstancePrincipal' and
        'ResourcePrincipal'. By default, 'ApiKey' will be used.
        """
        return pulumi.get(self, "auth")

    @property
    @pulumi.getter(name="configFileProfile")
    def config_file_profile(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The profile name to be used from config file, if not set it will be DEFAULT.
        """
        return pulumi.get(self, "config_file_profile")

    @property
    @pulumi.getter
    def fingerprint(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The fingerprint for the user's RSA key. This can be found in user settings in the Oracle Cloud Infrastructure
        console. Required if auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "fingerprint")

    @property
    @pulumi.getter(name="privateKey")
    def private_key(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) A PEM formatted RSA private key for the user. A private_key or a private_key_path must be provided if auth is
        set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "private_key")

    @property
    @pulumi.getter(name="privateKeyPassword")
    def private_key_password(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The password used to secure the private key.
        """
        return pulumi.get(self, "private_key_password")

    @property
    @pulumi.getter(name="privateKeyPath")
    def private_key_path(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The path to the user's PEM formatted private key. A private_key or a private_key_path must be provided if
        auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "private_key_path")

    @property
    @pulumi.getter
    def region(self) -> pulumi.Output[Optional[str]]:
        """
        (Required) The region for API connections (e.g. us-ashburn-1).
        """
        return pulumi.get(self, "region")

    @property
    @pulumi.getter(name="tenancyOcid")
    def tenancy_ocid(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The tenancy OCID for a user. The tenancy OCID can be found at the bottom of user settings in the Oracle Cloud
        Infrastructure console. Required if auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "tenancy_ocid")

    @property
    @pulumi.getter(name="userOcid")
    def user_ocid(self) -> pulumi.Output[Optional[str]]:
        """
        (Optional) The user OCID. This can be found in user settings in the Oracle Cloud Infrastructure console. Required if
        auth is set to 'ApiKey', ignored otherwise.
        """
        return pulumi.get(self, "user_ocid")

