# 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

__all__ = ['SyncGhDestinationArgs', 'SyncGhDestination']

@pulumi.input_type
class SyncGhDestinationArgs:
    def __init__(__self__, *,
                 access_token: Optional[pulumi.Input[_builtins.str]] = None,
                 allowed_ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None,
                 app_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disable_strict_networking: Optional[pulumi.Input[_builtins.bool]] = None,
                 environment_name: Optional[pulumi.Input[_builtins.str]] = None,
                 granularity: Optional[pulumi.Input[_builtins.str]] = None,
                 installation_id: Optional[pulumi.Input[_builtins.int]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 namespace: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_name: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_owner: Optional[pulumi.Input[_builtins.str]] = None,
                 secret_name_template: Optional[pulumi.Input[_builtins.str]] = None,
                 secrets_location: Optional[pulumi.Input[_builtins.str]] = None):
        """
        The set of arguments for constructing a SyncGhDestination resource.

        :param pulumi.Input[_builtins.str] access_token: Fine-grained or personal access token.
               Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
               variable.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv4_addresses: Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
               for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv6_addresses: Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
               for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.int]]] allowed_ports: Set of allowed ports for outbound connections from Vault to the
               destination. If not set, all ports are allowed. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] app_name: The user-defined name of the GitHub App configuration. This is a reference to the name used   
               on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
               Takes precedence over the `access_token` field.
        :param pulumi.Input[_builtins.bool] disable_strict_networking: If set to `true`, disables strict networking enforcement
               for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
               Defaults to `false`. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] environment_name: Environment name for the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] granularity: Determines what level of information is synced as a distinct resource
               at the destination. Supports `secret-path` and `secret-key`.
        :param pulumi.Input[_builtins.int] installation_id: The ID of the installation generated by GitHub when the app referenced by the `app_name` 
               was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        :param pulumi.Input[_builtins.str] name: Unique name of the GitHub destination.
        :param pulumi.Input[_builtins.str] namespace: The namespace to provision the resource in.
               The value should not contain leading or trailing forward slashes.
               The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        :param pulumi.Input[_builtins.str] repository_name: Name of the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
               variable.
        :param pulumi.Input[_builtins.str] repository_owner: GitHub organization or username that owns the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
               variable.
        :param pulumi.Input[_builtins.str] secret_name_template: Template describing how to generate external secret names.
               Supports a subset of the Go Template syntax.
        :param pulumi.Input[_builtins.str] secrets_location: Location where secrets are stored in the destination. Requires Vault 1.18+.
        """
        if access_token is not None:
            pulumi.set(__self__, "access_token", access_token)
        if allowed_ipv4_addresses is not None:
            pulumi.set(__self__, "allowed_ipv4_addresses", allowed_ipv4_addresses)
        if allowed_ipv6_addresses is not None:
            pulumi.set(__self__, "allowed_ipv6_addresses", allowed_ipv6_addresses)
        if allowed_ports is not None:
            pulumi.set(__self__, "allowed_ports", allowed_ports)
        if app_name is not None:
            pulumi.set(__self__, "app_name", app_name)
        if disable_strict_networking is not None:
            pulumi.set(__self__, "disable_strict_networking", disable_strict_networking)
        if environment_name is not None:
            pulumi.set(__self__, "environment_name", environment_name)
        if granularity is not None:
            pulumi.set(__self__, "granularity", granularity)
        if installation_id is not None:
            pulumi.set(__self__, "installation_id", installation_id)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if repository_name is not None:
            pulumi.set(__self__, "repository_name", repository_name)
        if repository_owner is not None:
            pulumi.set(__self__, "repository_owner", repository_owner)
        if secret_name_template is not None:
            pulumi.set(__self__, "secret_name_template", secret_name_template)
        if secrets_location is not None:
            pulumi.set(__self__, "secrets_location", secrets_location)

    @_builtins.property
    @pulumi.getter(name="accessToken")
    def access_token(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Fine-grained or personal access token.
        Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
        variable.
        """
        return pulumi.get(self, "access_token")

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

    @_builtins.property
    @pulumi.getter(name="allowedIpv4Addresses")
    def allowed_ipv4_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
        for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv4_addresses")

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

    @_builtins.property
    @pulumi.getter(name="allowedIpv6Addresses")
    def allowed_ipv6_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
        for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv6_addresses")

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

    @_builtins.property
    @pulumi.getter(name="allowedPorts")
    def allowed_ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]]:
        """
        Set of allowed ports for outbound connections from Vault to the
        destination. If not set, all ports are allowed. Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ports")

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

    @_builtins.property
    @pulumi.getter(name="appName")
    def app_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The user-defined name of the GitHub App configuration. This is a reference to the name used   
        on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
        Takes precedence over the `access_token` field.
        """
        return pulumi.get(self, "app_name")

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

    @_builtins.property
    @pulumi.getter(name="disableStrictNetworking")
    def disable_strict_networking(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        If set to `true`, disables strict networking enforcement
        for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
        Defaults to `false`. Requires Vault 1.19+.
        """
        return pulumi.get(self, "disable_strict_networking")

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

    @_builtins.property
    @pulumi.getter(name="environmentName")
    def environment_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Environment name for the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "environment_name")

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

    @_builtins.property
    @pulumi.getter
    def granularity(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Determines what level of information is synced as a distinct resource
        at the destination. Supports `secret-path` and `secret-key`.
        """
        return pulumi.get(self, "granularity")

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

    @_builtins.property
    @pulumi.getter(name="installationId")
    def installation_id(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The ID of the installation generated by GitHub when the app referenced by the `app_name` 
        was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        """
        return pulumi.get(self, "installation_id")

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

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Unique name of the GitHub destination.
        """
        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 namespace(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The namespace to provision the resource in.
        The value should not contain leading or trailing forward slashes.
        The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        """
        return pulumi.get(self, "namespace")

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

    @_builtins.property
    @pulumi.getter(name="repositoryName")
    def repository_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Name of the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
        variable.
        """
        return pulumi.get(self, "repository_name")

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

    @_builtins.property
    @pulumi.getter(name="repositoryOwner")
    def repository_owner(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        GitHub organization or username that owns the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
        variable.
        """
        return pulumi.get(self, "repository_owner")

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

    @_builtins.property
    @pulumi.getter(name="secretNameTemplate")
    def secret_name_template(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Template describing how to generate external secret names.
        Supports a subset of the Go Template syntax.
        """
        return pulumi.get(self, "secret_name_template")

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

    @_builtins.property
    @pulumi.getter(name="secretsLocation")
    def secrets_location(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Location where secrets are stored in the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "secrets_location")

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


@pulumi.input_type
class _SyncGhDestinationState:
    def __init__(__self__, *,
                 access_token: Optional[pulumi.Input[_builtins.str]] = None,
                 allowed_ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None,
                 app_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disable_strict_networking: Optional[pulumi.Input[_builtins.bool]] = None,
                 environment_name: Optional[pulumi.Input[_builtins.str]] = None,
                 granularity: Optional[pulumi.Input[_builtins.str]] = None,
                 installation_id: Optional[pulumi.Input[_builtins.int]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 namespace: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_name: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_owner: Optional[pulumi.Input[_builtins.str]] = None,
                 secret_name_template: Optional[pulumi.Input[_builtins.str]] = None,
                 secrets_location: Optional[pulumi.Input[_builtins.str]] = None,
                 type: Optional[pulumi.Input[_builtins.str]] = None):
        """
        Input properties used for looking up and filtering SyncGhDestination resources.

        :param pulumi.Input[_builtins.str] access_token: Fine-grained or personal access token.
               Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
               variable.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv4_addresses: Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
               for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv6_addresses: Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
               for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.int]]] allowed_ports: Set of allowed ports for outbound connections from Vault to the
               destination. If not set, all ports are allowed. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] app_name: The user-defined name of the GitHub App configuration. This is a reference to the name used   
               on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
               Takes precedence over the `access_token` field.
        :param pulumi.Input[_builtins.bool] disable_strict_networking: If set to `true`, disables strict networking enforcement
               for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
               Defaults to `false`. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] environment_name: Environment name for the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] granularity: Determines what level of information is synced as a distinct resource
               at the destination. Supports `secret-path` and `secret-key`.
        :param pulumi.Input[_builtins.int] installation_id: The ID of the installation generated by GitHub when the app referenced by the `app_name` 
               was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        :param pulumi.Input[_builtins.str] name: Unique name of the GitHub destination.
        :param pulumi.Input[_builtins.str] namespace: The namespace to provision the resource in.
               The value should not contain leading or trailing forward slashes.
               The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        :param pulumi.Input[_builtins.str] repository_name: Name of the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
               variable.
        :param pulumi.Input[_builtins.str] repository_owner: GitHub organization or username that owns the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
               variable.
        :param pulumi.Input[_builtins.str] secret_name_template: Template describing how to generate external secret names.
               Supports a subset of the Go Template syntax.
        :param pulumi.Input[_builtins.str] secrets_location: Location where secrets are stored in the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] type: The type of the secrets destination (`gh`).
        """
        if access_token is not None:
            pulumi.set(__self__, "access_token", access_token)
        if allowed_ipv4_addresses is not None:
            pulumi.set(__self__, "allowed_ipv4_addresses", allowed_ipv4_addresses)
        if allowed_ipv6_addresses is not None:
            pulumi.set(__self__, "allowed_ipv6_addresses", allowed_ipv6_addresses)
        if allowed_ports is not None:
            pulumi.set(__self__, "allowed_ports", allowed_ports)
        if app_name is not None:
            pulumi.set(__self__, "app_name", app_name)
        if disable_strict_networking is not None:
            pulumi.set(__self__, "disable_strict_networking", disable_strict_networking)
        if environment_name is not None:
            pulumi.set(__self__, "environment_name", environment_name)
        if granularity is not None:
            pulumi.set(__self__, "granularity", granularity)
        if installation_id is not None:
            pulumi.set(__self__, "installation_id", installation_id)
        if name is not None:
            pulumi.set(__self__, "name", name)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if repository_name is not None:
            pulumi.set(__self__, "repository_name", repository_name)
        if repository_owner is not None:
            pulumi.set(__self__, "repository_owner", repository_owner)
        if secret_name_template is not None:
            pulumi.set(__self__, "secret_name_template", secret_name_template)
        if secrets_location is not None:
            pulumi.set(__self__, "secrets_location", secrets_location)
        if type is not None:
            pulumi.set(__self__, "type", type)

    @_builtins.property
    @pulumi.getter(name="accessToken")
    def access_token(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Fine-grained or personal access token.
        Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
        variable.
        """
        return pulumi.get(self, "access_token")

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

    @_builtins.property
    @pulumi.getter(name="allowedIpv4Addresses")
    def allowed_ipv4_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
        for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv4_addresses")

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

    @_builtins.property
    @pulumi.getter(name="allowedIpv6Addresses")
    def allowed_ipv6_addresses(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]]:
        """
        Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
        for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv6_addresses")

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

    @_builtins.property
    @pulumi.getter(name="allowedPorts")
    def allowed_ports(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]]:
        """
        Set of allowed ports for outbound connections from Vault to the
        destination. If not set, all ports are allowed. Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ports")

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

    @_builtins.property
    @pulumi.getter(name="appName")
    def app_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The user-defined name of the GitHub App configuration. This is a reference to the name used   
        on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
        Takes precedence over the `access_token` field.
        """
        return pulumi.get(self, "app_name")

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

    @_builtins.property
    @pulumi.getter(name="disableStrictNetworking")
    def disable_strict_networking(self) -> Optional[pulumi.Input[_builtins.bool]]:
        """
        If set to `true`, disables strict networking enforcement
        for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
        Defaults to `false`. Requires Vault 1.19+.
        """
        return pulumi.get(self, "disable_strict_networking")

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

    @_builtins.property
    @pulumi.getter(name="environmentName")
    def environment_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Environment name for the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "environment_name")

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

    @_builtins.property
    @pulumi.getter
    def granularity(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Determines what level of information is synced as a distinct resource
        at the destination. Supports `secret-path` and `secret-key`.
        """
        return pulumi.get(self, "granularity")

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

    @_builtins.property
    @pulumi.getter(name="installationId")
    def installation_id(self) -> Optional[pulumi.Input[_builtins.int]]:
        """
        The ID of the installation generated by GitHub when the app referenced by the `app_name` 
        was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        """
        return pulumi.get(self, "installation_id")

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

    @_builtins.property
    @pulumi.getter
    def name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Unique name of the GitHub destination.
        """
        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 namespace(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The namespace to provision the resource in.
        The value should not contain leading or trailing forward slashes.
        The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        """
        return pulumi.get(self, "namespace")

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

    @_builtins.property
    @pulumi.getter(name="repositoryName")
    def repository_name(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Name of the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
        variable.
        """
        return pulumi.get(self, "repository_name")

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

    @_builtins.property
    @pulumi.getter(name="repositoryOwner")
    def repository_owner(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        GitHub organization or username that owns the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
        variable.
        """
        return pulumi.get(self, "repository_owner")

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

    @_builtins.property
    @pulumi.getter(name="secretNameTemplate")
    def secret_name_template(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Template describing how to generate external secret names.
        Supports a subset of the Go Template syntax.
        """
        return pulumi.get(self, "secret_name_template")

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

    @_builtins.property
    @pulumi.getter(name="secretsLocation")
    def secrets_location(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        Location where secrets are stored in the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "secrets_location")

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

    @_builtins.property
    @pulumi.getter
    def type(self) -> Optional[pulumi.Input[_builtins.str]]:
        """
        The type of the secrets destination (`gh`).
        """
        return pulumi.get(self, "type")

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


@pulumi.type_token("vault:secrets/syncGhDestination:SyncGhDestination")
class SyncGhDestination(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 access_token: Optional[pulumi.Input[_builtins.str]] = None,
                 allowed_ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None,
                 app_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disable_strict_networking: Optional[pulumi.Input[_builtins.bool]] = None,
                 environment_name: Optional[pulumi.Input[_builtins.str]] = None,
                 granularity: Optional[pulumi.Input[_builtins.str]] = None,
                 installation_id: Optional[pulumi.Input[_builtins.int]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 namespace: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_name: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_owner: Optional[pulumi.Input[_builtins.str]] = None,
                 secret_name_template: Optional[pulumi.Input[_builtins.str]] = None,
                 secrets_location: Optional[pulumi.Input[_builtins.str]] = None,
                 __props__=None):
        """
        Creates a GitHub destination to synchronize secrets in Vault. Requires Vault 1.16+.
        *Available only for Vault Enterprise*.

        > **Important** All data provided in the resource configuration will be
        written in cleartext to state and plan files generated by Terraform, and
        will appear in the console output when Terraform runs. Protect these
        artifacts accordingly. See
        the main provider documentation
        for more details.

        For more information on syncing secrets with GitHub, please refer to the Vault
        [documentation](https://developer.hashicorp.com/vault/docs/sync/github).

        ## Example Usage

        ```python
        import pulumi
        import pulumi_vault as vault

        gh = vault.secrets.SyncGhDestination("gh",
            name="gh-dest",
            access_token=access_token,
            repository_owner=repo_owner,
            repository_name="repo-name-example",
            secret_name_template="vault_{{ .MountAccessor | lowercase }}_{{ .SecretPath | lowercase }}",
            secrets_location="repository",
            environment_name="production",
            allowed_ipv4_addresses=[
                "192.168.1.0/24",
                "10.0.0.0/8",
            ],
            allowed_ipv6_addresses=["2001:db8::/32"],
            allowed_ports=[
                443,
                80,
                22,
            ],
            disable_strict_networking=False)
        ```

        ## Import

        GitHub Secrets sync destinations can be imported using the `name`, e.g.

        ```sh
        $ pulumi import vault:secrets/syncGhDestination:SyncGhDestination gh gh-dest
        ```


        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[_builtins.str] access_token: Fine-grained or personal access token.
               Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
               variable.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv4_addresses: Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
               for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv6_addresses: Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
               for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.int]]] allowed_ports: Set of allowed ports for outbound connections from Vault to the
               destination. If not set, all ports are allowed. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] app_name: The user-defined name of the GitHub App configuration. This is a reference to the name used   
               on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
               Takes precedence over the `access_token` field.
        :param pulumi.Input[_builtins.bool] disable_strict_networking: If set to `true`, disables strict networking enforcement
               for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
               Defaults to `false`. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] environment_name: Environment name for the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] granularity: Determines what level of information is synced as a distinct resource
               at the destination. Supports `secret-path` and `secret-key`.
        :param pulumi.Input[_builtins.int] installation_id: The ID of the installation generated by GitHub when the app referenced by the `app_name` 
               was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        :param pulumi.Input[_builtins.str] name: Unique name of the GitHub destination.
        :param pulumi.Input[_builtins.str] namespace: The namespace to provision the resource in.
               The value should not contain leading or trailing forward slashes.
               The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        :param pulumi.Input[_builtins.str] repository_name: Name of the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
               variable.
        :param pulumi.Input[_builtins.str] repository_owner: GitHub organization or username that owns the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
               variable.
        :param pulumi.Input[_builtins.str] secret_name_template: Template describing how to generate external secret names.
               Supports a subset of the Go Template syntax.
        :param pulumi.Input[_builtins.str] secrets_location: Location where secrets are stored in the destination. Requires Vault 1.18+.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: Optional[SyncGhDestinationArgs] = None,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Creates a GitHub destination to synchronize secrets in Vault. Requires Vault 1.16+.
        *Available only for Vault Enterprise*.

        > **Important** All data provided in the resource configuration will be
        written in cleartext to state and plan files generated by Terraform, and
        will appear in the console output when Terraform runs. Protect these
        artifacts accordingly. See
        the main provider documentation
        for more details.

        For more information on syncing secrets with GitHub, please refer to the Vault
        [documentation](https://developer.hashicorp.com/vault/docs/sync/github).

        ## Example Usage

        ```python
        import pulumi
        import pulumi_vault as vault

        gh = vault.secrets.SyncGhDestination("gh",
            name="gh-dest",
            access_token=access_token,
            repository_owner=repo_owner,
            repository_name="repo-name-example",
            secret_name_template="vault_{{ .MountAccessor | lowercase }}_{{ .SecretPath | lowercase }}",
            secrets_location="repository",
            environment_name="production",
            allowed_ipv4_addresses=[
                "192.168.1.0/24",
                "10.0.0.0/8",
            ],
            allowed_ipv6_addresses=["2001:db8::/32"],
            allowed_ports=[
                443,
                80,
                22,
            ],
            disable_strict_networking=False)
        ```

        ## Import

        GitHub Secrets sync destinations can be imported using the `name`, e.g.

        ```sh
        $ pulumi import vault:secrets/syncGhDestination:SyncGhDestination gh gh-dest
        ```


        :param str resource_name: The name of the resource.
        :param SyncGhDestinationArgs 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(SyncGhDestinationArgs, 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,
                 access_token: Optional[pulumi.Input[_builtins.str]] = None,
                 allowed_ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
                 allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None,
                 app_name: Optional[pulumi.Input[_builtins.str]] = None,
                 disable_strict_networking: Optional[pulumi.Input[_builtins.bool]] = None,
                 environment_name: Optional[pulumi.Input[_builtins.str]] = None,
                 granularity: Optional[pulumi.Input[_builtins.str]] = None,
                 installation_id: Optional[pulumi.Input[_builtins.int]] = None,
                 name: Optional[pulumi.Input[_builtins.str]] = None,
                 namespace: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_name: Optional[pulumi.Input[_builtins.str]] = None,
                 repository_owner: Optional[pulumi.Input[_builtins.str]] = None,
                 secret_name_template: Optional[pulumi.Input[_builtins.str]] = None,
                 secrets_location: Optional[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__ = SyncGhDestinationArgs.__new__(SyncGhDestinationArgs)

            __props__.__dict__["access_token"] = None if access_token is None else pulumi.Output.secret(access_token)
            __props__.__dict__["allowed_ipv4_addresses"] = allowed_ipv4_addresses
            __props__.__dict__["allowed_ipv6_addresses"] = allowed_ipv6_addresses
            __props__.__dict__["allowed_ports"] = allowed_ports
            __props__.__dict__["app_name"] = app_name
            __props__.__dict__["disable_strict_networking"] = disable_strict_networking
            __props__.__dict__["environment_name"] = environment_name
            __props__.__dict__["granularity"] = granularity
            __props__.__dict__["installation_id"] = installation_id
            __props__.__dict__["name"] = name
            __props__.__dict__["namespace"] = namespace
            __props__.__dict__["repository_name"] = repository_name
            __props__.__dict__["repository_owner"] = repository_owner
            __props__.__dict__["secret_name_template"] = secret_name_template
            __props__.__dict__["secrets_location"] = secrets_location
            __props__.__dict__["type"] = None
        secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["accessToken"])
        opts = pulumi.ResourceOptions.merge(opts, secret_opts)
        super(SyncGhDestination, __self__).__init__(
            'vault:secrets/syncGhDestination:SyncGhDestination',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            access_token: Optional[pulumi.Input[_builtins.str]] = None,
            allowed_ipv4_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            allowed_ipv6_addresses: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.str]]]] = None,
            allowed_ports: Optional[pulumi.Input[Sequence[pulumi.Input[_builtins.int]]]] = None,
            app_name: Optional[pulumi.Input[_builtins.str]] = None,
            disable_strict_networking: Optional[pulumi.Input[_builtins.bool]] = None,
            environment_name: Optional[pulumi.Input[_builtins.str]] = None,
            granularity: Optional[pulumi.Input[_builtins.str]] = None,
            installation_id: Optional[pulumi.Input[_builtins.int]] = None,
            name: Optional[pulumi.Input[_builtins.str]] = None,
            namespace: Optional[pulumi.Input[_builtins.str]] = None,
            repository_name: Optional[pulumi.Input[_builtins.str]] = None,
            repository_owner: Optional[pulumi.Input[_builtins.str]] = None,
            secret_name_template: Optional[pulumi.Input[_builtins.str]] = None,
            secrets_location: Optional[pulumi.Input[_builtins.str]] = None,
            type: Optional[pulumi.Input[_builtins.str]] = None) -> 'SyncGhDestination':
        """
        Get an existing SyncGhDestination 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] access_token: Fine-grained or personal access token.
               Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
               variable.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv4_addresses: Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
               for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.str]]] allowed_ipv6_addresses: Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
               for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
               Requires Vault 1.19+.
        :param pulumi.Input[Sequence[pulumi.Input[_builtins.int]]] allowed_ports: Set of allowed ports for outbound connections from Vault to the
               destination. If not set, all ports are allowed. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] app_name: The user-defined name of the GitHub App configuration. This is a reference to the name used   
               on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
               Takes precedence over the `access_token` field.
        :param pulumi.Input[_builtins.bool] disable_strict_networking: If set to `true`, disables strict networking enforcement
               for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
               Defaults to `false`. Requires Vault 1.19+.
        :param pulumi.Input[_builtins.str] environment_name: Environment name for the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] granularity: Determines what level of information is synced as a distinct resource
               at the destination. Supports `secret-path` and `secret-key`.
        :param pulumi.Input[_builtins.int] installation_id: The ID of the installation generated by GitHub when the app referenced by the `app_name` 
               was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        :param pulumi.Input[_builtins.str] name: Unique name of the GitHub destination.
        :param pulumi.Input[_builtins.str] namespace: The namespace to provision the resource in.
               The value should not contain leading or trailing forward slashes.
               The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        :param pulumi.Input[_builtins.str] repository_name: Name of the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
               variable.
        :param pulumi.Input[_builtins.str] repository_owner: GitHub organization or username that owns the repository.
               Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
               variable.
        :param pulumi.Input[_builtins.str] secret_name_template: Template describing how to generate external secret names.
               Supports a subset of the Go Template syntax.
        :param pulumi.Input[_builtins.str] secrets_location: Location where secrets are stored in the destination. Requires Vault 1.18+.
        :param pulumi.Input[_builtins.str] type: The type of the secrets destination (`gh`).
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _SyncGhDestinationState.__new__(_SyncGhDestinationState)

        __props__.__dict__["access_token"] = access_token
        __props__.__dict__["allowed_ipv4_addresses"] = allowed_ipv4_addresses
        __props__.__dict__["allowed_ipv6_addresses"] = allowed_ipv6_addresses
        __props__.__dict__["allowed_ports"] = allowed_ports
        __props__.__dict__["app_name"] = app_name
        __props__.__dict__["disable_strict_networking"] = disable_strict_networking
        __props__.__dict__["environment_name"] = environment_name
        __props__.__dict__["granularity"] = granularity
        __props__.__dict__["installation_id"] = installation_id
        __props__.__dict__["name"] = name
        __props__.__dict__["namespace"] = namespace
        __props__.__dict__["repository_name"] = repository_name
        __props__.__dict__["repository_owner"] = repository_owner
        __props__.__dict__["secret_name_template"] = secret_name_template
        __props__.__dict__["secrets_location"] = secrets_location
        __props__.__dict__["type"] = type
        return SyncGhDestination(resource_name, opts=opts, __props__=__props__)

    @_builtins.property
    @pulumi.getter(name="accessToken")
    def access_token(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Fine-grained or personal access token.
        Can be omitted and directly provided to Vault using the `GITHUB_ACCESS_TOKEN` environment
        variable.
        """
        return pulumi.get(self, "access_token")

    @_builtins.property
    @pulumi.getter(name="allowedIpv4Addresses")
    def allowed_ipv4_addresses(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        Set of allowed IPv4 addresses in CIDR notation (e.g., `192.168.1.1/32`)
        for outbound connections from Vault to the destination. If not set, all IPv4 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv4_addresses")

    @_builtins.property
    @pulumi.getter(name="allowedIpv6Addresses")
    def allowed_ipv6_addresses(self) -> pulumi.Output[Optional[Sequence[_builtins.str]]]:
        """
        Set of allowed IPv6 addresses in CIDR notation (e.g., `2001:db8::1/128`)
        for outbound connections from Vault to the destination. If not set, all IPv6 addresses are allowed.
        Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ipv6_addresses")

    @_builtins.property
    @pulumi.getter(name="allowedPorts")
    def allowed_ports(self) -> pulumi.Output[Optional[Sequence[_builtins.int]]]:
        """
        Set of allowed ports for outbound connections from Vault to the
        destination. If not set, all ports are allowed. Requires Vault 1.19+.
        """
        return pulumi.get(self, "allowed_ports")

    @_builtins.property
    @pulumi.getter(name="appName")
    def app_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The user-defined name of the GitHub App configuration. This is a reference to the name used   
        on the new endpoint when configuring the GitHub app on the Vault Server. Can be modified.
        Takes precedence over the `access_token` field.
        """
        return pulumi.get(self, "app_name")

    @_builtins.property
    @pulumi.getter(name="disableStrictNetworking")
    def disable_strict_networking(self) -> pulumi.Output[Optional[_builtins.bool]]:
        """
        If set to `true`, disables strict networking enforcement
        for this destination. When disabled, Vault will not enforce allowed IP addresses and ports.
        Defaults to `false`. Requires Vault 1.19+.
        """
        return pulumi.get(self, "disable_strict_networking")

    @_builtins.property
    @pulumi.getter(name="environmentName")
    def environment_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Environment name for the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "environment_name")

    @_builtins.property
    @pulumi.getter
    def granularity(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Determines what level of information is synced as a distinct resource
        at the destination. Supports `secret-path` and `secret-key`.
        """
        return pulumi.get(self, "granularity")

    @_builtins.property
    @pulumi.getter(name="installationId")
    def installation_id(self) -> pulumi.Output[Optional[_builtins.int]]:
        """
        The ID of the installation generated by GitHub when the app referenced by the `app_name` 
        was installed in the user's GitHub account. Can be modified. Necessary if the `app_name` field is also provided.
        """
        return pulumi.get(self, "installation_id")

    @_builtins.property
    @pulumi.getter
    def name(self) -> pulumi.Output[_builtins.str]:
        """
        Unique name of the GitHub destination.
        """
        return pulumi.get(self, "name")

    @_builtins.property
    @pulumi.getter
    def namespace(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        The namespace to provision the resource in.
        The value should not contain leading or trailing forward slashes.
        The `namespace` is always relative to the provider's configured [namespace](https://www.terraform.io/docs/providers/vault/index.html#namespace).
        """
        return pulumi.get(self, "namespace")

    @_builtins.property
    @pulumi.getter(name="repositoryName")
    def repository_name(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Name of the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_NAME` environment
        variable.
        """
        return pulumi.get(self, "repository_name")

    @_builtins.property
    @pulumi.getter(name="repositoryOwner")
    def repository_owner(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        GitHub organization or username that owns the repository.
        Can be omitted and directly provided to Vault using the `GITHUB_REPOSITORY_OWNER` environment
        variable.
        """
        return pulumi.get(self, "repository_owner")

    @_builtins.property
    @pulumi.getter(name="secretNameTemplate")
    def secret_name_template(self) -> pulumi.Output[_builtins.str]:
        """
        Template describing how to generate external secret names.
        Supports a subset of the Go Template syntax.
        """
        return pulumi.get(self, "secret_name_template")

    @_builtins.property
    @pulumi.getter(name="secretsLocation")
    def secrets_location(self) -> pulumi.Output[Optional[_builtins.str]]:
        """
        Location where secrets are stored in the destination. Requires Vault 1.18+.
        """
        return pulumi.get(self, "secrets_location")

    @_builtins.property
    @pulumi.getter
    def type(self) -> pulumi.Output[_builtins.str]:
        """
        The type of the secrets destination (`gh`).
        """
        return pulumi.get(self, "type")

