# 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 warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from . import _utilities
from . import outputs
from ._inputs import *

__all__ = ['CpsDvEnrollmentArgs', 'CpsDvEnrollment']

@pulumi.input_type
class CpsDvEnrollmentArgs:
    def __init__(__self__, *,
                 admin_contact: pulumi.Input['CpsDvEnrollmentAdminContactArgs'],
                 common_name: pulumi.Input[str],
                 contract_id: pulumi.Input[str],
                 csr: pulumi.Input['CpsDvEnrollmentCsrArgs'],
                 network_configuration: pulumi.Input['CpsDvEnrollmentNetworkConfigurationArgs'],
                 organization: pulumi.Input['CpsDvEnrollmentOrganizationArgs'],
                 secure_network: pulumi.Input[str],
                 signature_algorithm: pulumi.Input[str],
                 sni_only: pulumi.Input[bool],
                 tech_contact: pulumi.Input['CpsDvEnrollmentTechContactArgs'],
                 acknowledge_pre_verification_warnings: Optional[pulumi.Input[bool]] = None,
                 certificate_chain_type: Optional[pulumi.Input[str]] = None,
                 enable_multi_stacked_certificates: Optional[pulumi.Input[bool]] = None,
                 sans: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None):
        """
        The set of arguments for constructing a CpsDvEnrollment resource.
        """
        pulumi.set(__self__, "admin_contact", admin_contact)
        pulumi.set(__self__, "common_name", common_name)
        pulumi.set(__self__, "contract_id", contract_id)
        pulumi.set(__self__, "csr", csr)
        pulumi.set(__self__, "network_configuration", network_configuration)
        pulumi.set(__self__, "organization", organization)
        pulumi.set(__self__, "secure_network", secure_network)
        pulumi.set(__self__, "signature_algorithm", signature_algorithm)
        pulumi.set(__self__, "sni_only", sni_only)
        pulumi.set(__self__, "tech_contact", tech_contact)
        if acknowledge_pre_verification_warnings is not None:
            pulumi.set(__self__, "acknowledge_pre_verification_warnings", acknowledge_pre_verification_warnings)
        if certificate_chain_type is not None:
            pulumi.set(__self__, "certificate_chain_type", certificate_chain_type)
        if enable_multi_stacked_certificates is not None:
            pulumi.set(__self__, "enable_multi_stacked_certificates", enable_multi_stacked_certificates)
        if sans is not None:
            pulumi.set(__self__, "sans", sans)

    @property
    @pulumi.getter(name="adminContact")
    def admin_contact(self) -> pulumi.Input['CpsDvEnrollmentAdminContactArgs']:
        return pulumi.get(self, "admin_contact")

    @admin_contact.setter
    def admin_contact(self, value: pulumi.Input['CpsDvEnrollmentAdminContactArgs']):
        pulumi.set(self, "admin_contact", value)

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

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

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

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

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

    @csr.setter
    def csr(self, value: pulumi.Input['CpsDvEnrollmentCsrArgs']):
        pulumi.set(self, "csr", value)

    @property
    @pulumi.getter(name="networkConfiguration")
    def network_configuration(self) -> pulumi.Input['CpsDvEnrollmentNetworkConfigurationArgs']:
        return pulumi.get(self, "network_configuration")

    @network_configuration.setter
    def network_configuration(self, value: pulumi.Input['CpsDvEnrollmentNetworkConfigurationArgs']):
        pulumi.set(self, "network_configuration", value)

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

    @organization.setter
    def organization(self, value: pulumi.Input['CpsDvEnrollmentOrganizationArgs']):
        pulumi.set(self, "organization", value)

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

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

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

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

    @property
    @pulumi.getter(name="sniOnly")
    def sni_only(self) -> pulumi.Input[bool]:
        return pulumi.get(self, "sni_only")

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

    @property
    @pulumi.getter(name="techContact")
    def tech_contact(self) -> pulumi.Input['CpsDvEnrollmentTechContactArgs']:
        return pulumi.get(self, "tech_contact")

    @tech_contact.setter
    def tech_contact(self, value: pulumi.Input['CpsDvEnrollmentTechContactArgs']):
        pulumi.set(self, "tech_contact", value)

    @property
    @pulumi.getter(name="acknowledgePreVerificationWarnings")
    def acknowledge_pre_verification_warnings(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "acknowledge_pre_verification_warnings")

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

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

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

    @property
    @pulumi.getter(name="enableMultiStackedCertificates")
    def enable_multi_stacked_certificates(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "enable_multi_stacked_certificates")

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

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

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


@pulumi.input_type
class _CpsDvEnrollmentState:
    def __init__(__self__, *,
                 acknowledge_pre_verification_warnings: Optional[pulumi.Input[bool]] = None,
                 admin_contact: Optional[pulumi.Input['CpsDvEnrollmentAdminContactArgs']] = None,
                 certificate_chain_type: Optional[pulumi.Input[str]] = None,
                 certificate_type: Optional[pulumi.Input[str]] = None,
                 common_name: Optional[pulumi.Input[str]] = None,
                 contract_id: Optional[pulumi.Input[str]] = None,
                 csr: Optional[pulumi.Input['CpsDvEnrollmentCsrArgs']] = None,
                 dns_challenges: Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentDnsChallengeArgs']]]] = None,
                 enable_multi_stacked_certificates: Optional[pulumi.Input[bool]] = None,
                 http_challenges: Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentHttpChallengeArgs']]]] = None,
                 network_configuration: Optional[pulumi.Input['CpsDvEnrollmentNetworkConfigurationArgs']] = None,
                 organization: Optional[pulumi.Input['CpsDvEnrollmentOrganizationArgs']] = None,
                 registration_authority: Optional[pulumi.Input[str]] = None,
                 sans: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 secure_network: Optional[pulumi.Input[str]] = None,
                 signature_algorithm: Optional[pulumi.Input[str]] = None,
                 sni_only: Optional[pulumi.Input[bool]] = None,
                 tech_contact: Optional[pulumi.Input['CpsDvEnrollmentTechContactArgs']] = None,
                 validation_type: Optional[pulumi.Input[str]] = None):
        """
        Input properties used for looking up and filtering CpsDvEnrollment resources.
        """
        if acknowledge_pre_verification_warnings is not None:
            pulumi.set(__self__, "acknowledge_pre_verification_warnings", acknowledge_pre_verification_warnings)
        if admin_contact is not None:
            pulumi.set(__self__, "admin_contact", admin_contact)
        if certificate_chain_type is not None:
            pulumi.set(__self__, "certificate_chain_type", certificate_chain_type)
        if certificate_type is not None:
            pulumi.set(__self__, "certificate_type", certificate_type)
        if common_name is not None:
            pulumi.set(__self__, "common_name", common_name)
        if contract_id is not None:
            pulumi.set(__self__, "contract_id", contract_id)
        if csr is not None:
            pulumi.set(__self__, "csr", csr)
        if dns_challenges is not None:
            pulumi.set(__self__, "dns_challenges", dns_challenges)
        if enable_multi_stacked_certificates is not None:
            pulumi.set(__self__, "enable_multi_stacked_certificates", enable_multi_stacked_certificates)
        if http_challenges is not None:
            pulumi.set(__self__, "http_challenges", http_challenges)
        if network_configuration is not None:
            pulumi.set(__self__, "network_configuration", network_configuration)
        if organization is not None:
            pulumi.set(__self__, "organization", organization)
        if registration_authority is not None:
            pulumi.set(__self__, "registration_authority", registration_authority)
        if sans is not None:
            pulumi.set(__self__, "sans", sans)
        if secure_network is not None:
            pulumi.set(__self__, "secure_network", secure_network)
        if signature_algorithm is not None:
            pulumi.set(__self__, "signature_algorithm", signature_algorithm)
        if sni_only is not None:
            pulumi.set(__self__, "sni_only", sni_only)
        if tech_contact is not None:
            pulumi.set(__self__, "tech_contact", tech_contact)
        if validation_type is not None:
            pulumi.set(__self__, "validation_type", validation_type)

    @property
    @pulumi.getter(name="acknowledgePreVerificationWarnings")
    def acknowledge_pre_verification_warnings(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "acknowledge_pre_verification_warnings")

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

    @property
    @pulumi.getter(name="adminContact")
    def admin_contact(self) -> Optional[pulumi.Input['CpsDvEnrollmentAdminContactArgs']]:
        return pulumi.get(self, "admin_contact")

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="dnsChallenges")
    def dns_challenges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentDnsChallengeArgs']]]]:
        return pulumi.get(self, "dns_challenges")

    @dns_challenges.setter
    def dns_challenges(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentDnsChallengeArgs']]]]):
        pulumi.set(self, "dns_challenges", value)

    @property
    @pulumi.getter(name="enableMultiStackedCertificates")
    def enable_multi_stacked_certificates(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "enable_multi_stacked_certificates")

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

    @property
    @pulumi.getter(name="httpChallenges")
    def http_challenges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentHttpChallengeArgs']]]]:
        return pulumi.get(self, "http_challenges")

    @http_challenges.setter
    def http_challenges(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['CpsDvEnrollmentHttpChallengeArgs']]]]):
        pulumi.set(self, "http_challenges", value)

    @property
    @pulumi.getter(name="networkConfiguration")
    def network_configuration(self) -> Optional[pulumi.Input['CpsDvEnrollmentNetworkConfigurationArgs']]:
        return pulumi.get(self, "network_configuration")

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

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

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

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

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

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

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

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

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

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

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

    @property
    @pulumi.getter(name="sniOnly")
    def sni_only(self) -> Optional[pulumi.Input[bool]]:
        return pulumi.get(self, "sni_only")

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

    @property
    @pulumi.getter(name="techContact")
    def tech_contact(self) -> Optional[pulumi.Input['CpsDvEnrollmentTechContactArgs']]:
        return pulumi.get(self, "tech_contact")

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

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

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


class CpsDvEnrollment(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 acknowledge_pre_verification_warnings: Optional[pulumi.Input[bool]] = None,
                 admin_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentAdminContactArgs']]] = None,
                 certificate_chain_type: Optional[pulumi.Input[str]] = None,
                 common_name: Optional[pulumi.Input[str]] = None,
                 contract_id: Optional[pulumi.Input[str]] = None,
                 csr: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentCsrArgs']]] = None,
                 enable_multi_stacked_certificates: Optional[pulumi.Input[bool]] = None,
                 network_configuration: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentNetworkConfigurationArgs']]] = None,
                 organization: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentOrganizationArgs']]] = None,
                 sans: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 secure_network: Optional[pulumi.Input[str]] = None,
                 signature_algorithm: Optional[pulumi.Input[str]] = None,
                 sni_only: Optional[pulumi.Input[bool]] = None,
                 tech_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentTechContactArgs']]] = None,
                 __props__=None):
        """
        Use the `CpsDvEnrollment` resource to create an enrollment with all the information about your certificate life cycle, from the time you request it, through removal or automatic renewal. You can treat an enrollment as a core container for all the operations you perform within CPS.

        You can use this resource with `DnsRecord` or other third-party DNS provider to create DNS records, and `CpsDvValidation` to complete the certificate validation.

        ## Example Usage

        Basic usage:

        ```python
        import pulumi
        import pulumi_akamai as akamai

        example = akamai.CpsDvEnrollment("example",
            contract_id="ctr_1-AB123",
            acknowledge_pre_verification_warnings=True,
            common_name="cps-test.example.net",
            sans=[
                "san1.cps-test.example.net",
                "san2.cps-test.example.net",
            ],
            secure_network="enhanced-tls",
            sni_only=True,
            admin_contact=akamai.CpsDvEnrollmentAdminContactArgs(
                first_name="x1",
                last_name="x2",
                phone="123123123",
                email="x1x2@example.net",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                organization="Akamai",
                postal_code="02142",
                region="MA",
                title="Administrator",
            ),
            tech_contact=akamai.CpsDvEnrollmentTechContactArgs(
                first_name="x3",
                last_name="x4",
                phone="123123123",
                email="x3x4@akamai.com",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                organization="Akamai",
                postal_code="02142",
                region="MA",
                title="Administrator",
            ),
            certificate_chain_type="default",
            csr=akamai.CpsDvEnrollmentCsrArgs(
                country_code="US",
                city="cambridge",
                organization="Akamai",
                organizational_unit="Dev",
                state="MA",
            ),
            enable_multi_stacked_certificates=False,
            network_configuration=akamai.CpsDvEnrollmentNetworkConfigurationArgs(
                disallowed_tls_versions=[
                    "TLSv1",
                    "TLSv1_1",
                ],
                clone_dns_names=False,
                geography="core",
                ocsp_stapling="on",
                preferred_ciphers="ak-akamai-2020q1",
                must_have_ciphers="ak-akamai-2020q1",
                quic_enabled=False,
            ),
            signature_algorithm="SHA-256",
            organization=akamai.CpsDvEnrollmentOrganizationArgs(
                name="Akamai",
                phone="123123123",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                postal_code="02142",
                region="MA",
            ))
        pulumi.export("dnsChallenges", example.dns_challenges)
        pulumi.export("httpChallenges", example.http_challenges)
        pulumi.export("enrollmentId", example.id)
        ```
        ## Argument reference

        The following arguments are supported:

        * `contract_id` - (Required) A contract's ID, optionally with the `ctr_` prefix.
        * `common_name` - (Required) The fully qualified domain name (FQDN) for which you plan to use your certificate. The domain name you specify here must be owned or have legal rights to use the domain by the company you specify as `organization`. The company that owns the domain name must be a legally incorporated entity and be active and in good standing.
        * `sans` - (Optional) Additional common names to create a Subject Alternative Names (SAN) list.
        * `secure_network` - (Required) The type of deployment network you want to use. `standard-tls` deploys your certificate to Akamai’s standard secure network, but it isn't PCI compliant. `enhanced-tls` deploys your certificate to Akamai’s more secure network with PCI compliance capability.
        * `sni_only` - (Required) Whether you want to enable SNI-only extension for the enrollment. Server Name Indication (SNI) is an extension of the Transport Layer Security (TLS) networking protocol. It allows a server to present multiple certificates on the same IP address. All modern web browsers support the SNI extension. If you have the same SAN on two or more certificates with the SNI-only option set, Akamai may serve traffic using any certificate which matches the requested SNI hostname. You should avoid multiple certificates with overlapping SAN names when using SNI-only. You can't change this setting once an enrollment is created.
        * `acknowledge_pre_verification_warnings` - (Optional) Whether you want to automatically acknowledge the validation warnings of the current job state and proceed with the execution of a change.
        * `admin_contact` - (Required) Contact information for the certificate administrator at your company.
          
          Requires these additional arguments:
          
              * `first_name` - (Required) The first name of the certificate administrator at your company.
              * `last_name` - (Required) The last name of the certificate administrator at your company.
              * `title` - (Optional) The title of the certificate administrator at your company.
              * `organization` - (Required) The name of your organization.
              * `email` - (Required) The email address of the administrator who you want to use as a contact at your company.
              * `phone` - (Required) The phone number of your organization.
              * `address_line_one` - (Required) The address of your organization.
              * `address_line_two` - (Optional) The address of your organization.
              * `city` - (Required) The city where your organization resides.
              * `region` - (Required) The region of your organization, typically a state or province.
              * `postal_code` - (Required) The postal code of your organization.
              * `country_code` - (Required) The code for the counrty where your organization resides.
        * `certificate_chain_type` - (Optional) Certificate trust chain type.
        * `csr` - (Required) 	When you create an enrollment, you also generate a certificate signing request (CSR) using CPS. CPS signs the CSR with the private key. The CSR contains all the information the CA needs to issue your certificate.
          
          Requires these additional arguments:
          
              * `country_code` - (Required) The country code for the country where your organization is located.
              * `city` - (Required) The city where your organization resides.
              * `organization` - (Required The name of your company or organization. Enter the name as it appears in all legal documents and as it appears in the legal entity filing.
              * `organizational_unit` - (Required) Your organizational unit.
              * `state` - (Required) 	Your state or province.
        * `enable_multi_stacked_certificates` - (Optional) Whether to enable an ECDSA certificate in addition to an RSA certificate. CPS automatically performs all certificate operations on both certificates, and uses the best certificate for each client connection to your secure properties. If you are pinning the certificates, you need to pin both the RSA and the ECDSA certificate.
        * `network_configuration` - (Required) The network information and TLS Metadata you want CPS to use to push the completed certificate to the network.
          
          Requires these additional arguments:
          
              * `client_mutual_authentication` - (Optional) The configuration for client mutual authentication. Specifies the trust chain that is used to verify client certificates and some configuration options.
              
                Requires these additional arguments:
              
                 * `send_ca_list_to_client` - (Optional) Whether you want to enable the server to send the certificate authority (CA) list to the client.
                 * `ocsp_enabled` - (Optional) Whether you want to enable the Online Certificate Status Protocol (OCSP) stapling for client certificates.
                 * `set_id` - (Optional) The identifier of the set of trust chains, created in the [Trust Chain Manager](https://developer.akamai.com/api/web_performance/trust_chain_manager/v1.html).
              * `disallowed_tls_versions` - (Optional) The TLS protocol version to disallow. CPS uses the TLS protocols that Akamai currently supports as a best practice.
              * `clone_dns_names` - (Optional) Whether CPS should direct traffic using all the SANs you listed in the SANs parameter when you created your enrollment.
              * `geography` - (Required) Lists where you can deploy the certificate. Either `core` to specify worldwide deployment (including China and Russia), `china+core` to specify worldwide deployment and China, or `russia+core` to specify worldwide deployment and Russia. You can only use the setting to include China and Russia if your Akamai contract specifies your ability to do so and you have approval from the Chinese and Russian government.
              * `must_have_ciphers` - (Optional) The ciphers to include for the enrollment while deploying it on the network. Defaults to `ak-akamai-default` when it is not set. For more information on cipher profiles, see [Akamai community](https://community.akamai.com/customers/s/article/SSL-TLS-Cipher-Profiles-for-Akamai-Secure-CDNrxdxm).
              * `ocsp_stapling` - (Optional) Whether to use OCSP stapling for the enrollment, either `on`, `off` or `not-set`. OCSP Stapling improves performance by including a valid OCSP response in every TLS handshake. This option allows the visitors on your site to query the Online Certificate Status Protocol (OCSP) server at regular intervals to obtain a signed time-stamped OCSP response. This response must be signed by the CA, not the server, therefore ensuring security. Disable OSCP Stapling if you want visitors to your site to contact the CA directly for an OSCP response. OCSP allows you to obtain the revocation status of a certificate.
              * `preferred_ciphers` - (Optional) Ciphers that you preferably want to include for the enrollment while deploying it on the network. Defaults to `ak-akamai-default` when it is not set. For more information on cipher profiles, see [Akamai community](https://community.akamai.com/customers/s/article/SSL-TLS-Cipher-Profiles-for-Akamai-Secure-CDNrxdxm).
              * `quic_enabled` - (Optional) Whether to use the QUIC transport layer network protocol.
        * `signature_algorithm` - (Required) The Secure Hash Algorithm (SHA) function, either `SHA-1` or `SHA-256`.
        * `tech_contact` - (Required) The technical contact within Akamai. This is the person you work closest with at Akamai and who can verify the certificate request. The CA calls this contact if there are any issues with the certificate and they can't reach the `admin_contact`.
          
          Requires these additional arguments:
          
              * `first_name` - (Required) The first name of the technical contact at Akamai.
              * `last_name` - (Required) The last name of the technical contact at Akamai.
              * `title` - (Optional) The title of the technical contact at Akamai.
              * `organization` - (Required) The name of the organization in Akamai where your technical contact works.
              * `email` - (Required) The email address of the technical contact at Akamai, accessible at the `akamai.com` domain.
              * `phone` - (Required) The phone number of the technical contact at Akamai.
              * `address_line_one` - (Required) The address for the technical contact at Akamai.
              * `address_line_two` - (Optional) The address for the technical contact at Akamai.
              * `city` - (Required) The address for the technical contact at Akamai.
              * `region` - (Required) The region for the technical contact at Akamai.
              * `postal_code` - (Required) The postal code for the technical contact at Akamai.
              * `country_code` - (Required) The country code for the technical contact at Akamai.
        * `organization` - (Required) Your organization information.
          
          Requires these additional arguments:
          
              * `name` - (Required) The name of your organization.
              * `phone` - (Required) The phone number of the administrator who you want to use as a contact at your company.
              * `address_line_one` - (Required) The address of your organization.
              * `address_line_two` - (Optional) The address of your organization.
              * `city` - (Required) The city where your organization resides.
              * `region` - (Required) The region of your organization, typically a state or province.
              * `postal_code` - (Required) The postal code of your organization.
              * `country_code` - (Required) The code for the country where your organization resides.

        ## Attributes reference

        The resource returns these attributes:

        * `registration_authority` - (Required) This value populates automatically with the `lets-encrypt` certificate type and is preserved in the `state` file.
        * `certificate_type` - (Required) This value populates automatically with the `san` certificate type and is preserved in the `state` file.
        * `validation_type` - (Required) This value populates automatically with the `dv` validation type and is preserved in the `state` file.
        * `id` - The unique identifier for this enrollment.
        * `dns_challenges` - The validation challenge for the domains listed in the certificate. To successfully perform the validation, only one challenge for each domain must be complete, either `dns_challenges` or `http_challenges`.
          
          Returns these additional attributes:
          
              * `domain` - The domain to validate.
              * `full_path` - The URL where Akamai publishes `response_body` for Let’s Encrypt to validate.
              * `response_body` - The data Let’s Encrypt expects to find served at `full_path` URL.
        * `http_challenges` - The validation challenge for the domains listed in the certificate. To successfully perform the validation, only one challenge for each domain must be complete, either `dns_challenges` or `http_challenges`.
          
          Returns these additional attributes:
          
              * `domain` - The domain to validate.
              * `full_path` - The URL where Akamai publishes `response_body` for Let’s Encrypt to validate.
              * `response_body` - The data Let’s Encrypt expects to find served at `full_path` URL.

        ## Import

        Basic Usagehcl resource "akamai_cps_dv_enrollment" "example" { # (resource arguments) } You can import your Akamai DV enrollment using a comma-delimited string of the enrollment ID and

         contract ID, optionally with the `ctr_` prefix. You have to enter the IDs in this order`enrollment_id,contract_id` For example

        ```sh
         $ pulumi import akamai:index/cpsDvEnrollment:CpsDvEnrollment example 12345,1-AB123
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: CpsDvEnrollmentArgs,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        Use the `CpsDvEnrollment` resource to create an enrollment with all the information about your certificate life cycle, from the time you request it, through removal or automatic renewal. You can treat an enrollment as a core container for all the operations you perform within CPS.

        You can use this resource with `DnsRecord` or other third-party DNS provider to create DNS records, and `CpsDvValidation` to complete the certificate validation.

        ## Example Usage

        Basic usage:

        ```python
        import pulumi
        import pulumi_akamai as akamai

        example = akamai.CpsDvEnrollment("example",
            contract_id="ctr_1-AB123",
            acknowledge_pre_verification_warnings=True,
            common_name="cps-test.example.net",
            sans=[
                "san1.cps-test.example.net",
                "san2.cps-test.example.net",
            ],
            secure_network="enhanced-tls",
            sni_only=True,
            admin_contact=akamai.CpsDvEnrollmentAdminContactArgs(
                first_name="x1",
                last_name="x2",
                phone="123123123",
                email="x1x2@example.net",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                organization="Akamai",
                postal_code="02142",
                region="MA",
                title="Administrator",
            ),
            tech_contact=akamai.CpsDvEnrollmentTechContactArgs(
                first_name="x3",
                last_name="x4",
                phone="123123123",
                email="x3x4@akamai.com",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                organization="Akamai",
                postal_code="02142",
                region="MA",
                title="Administrator",
            ),
            certificate_chain_type="default",
            csr=akamai.CpsDvEnrollmentCsrArgs(
                country_code="US",
                city="cambridge",
                organization="Akamai",
                organizational_unit="Dev",
                state="MA",
            ),
            enable_multi_stacked_certificates=False,
            network_configuration=akamai.CpsDvEnrollmentNetworkConfigurationArgs(
                disallowed_tls_versions=[
                    "TLSv1",
                    "TLSv1_1",
                ],
                clone_dns_names=False,
                geography="core",
                ocsp_stapling="on",
                preferred_ciphers="ak-akamai-2020q1",
                must_have_ciphers="ak-akamai-2020q1",
                quic_enabled=False,
            ),
            signature_algorithm="SHA-256",
            organization=akamai.CpsDvEnrollmentOrganizationArgs(
                name="Akamai",
                phone="123123123",
                address_line_one="150 Broadway",
                city="Cambridge",
                country_code="US",
                postal_code="02142",
                region="MA",
            ))
        pulumi.export("dnsChallenges", example.dns_challenges)
        pulumi.export("httpChallenges", example.http_challenges)
        pulumi.export("enrollmentId", example.id)
        ```
        ## Argument reference

        The following arguments are supported:

        * `contract_id` - (Required) A contract's ID, optionally with the `ctr_` prefix.
        * `common_name` - (Required) The fully qualified domain name (FQDN) for which you plan to use your certificate. The domain name you specify here must be owned or have legal rights to use the domain by the company you specify as `organization`. The company that owns the domain name must be a legally incorporated entity and be active and in good standing.
        * `sans` - (Optional) Additional common names to create a Subject Alternative Names (SAN) list.
        * `secure_network` - (Required) The type of deployment network you want to use. `standard-tls` deploys your certificate to Akamai’s standard secure network, but it isn't PCI compliant. `enhanced-tls` deploys your certificate to Akamai’s more secure network with PCI compliance capability.
        * `sni_only` - (Required) Whether you want to enable SNI-only extension for the enrollment. Server Name Indication (SNI) is an extension of the Transport Layer Security (TLS) networking protocol. It allows a server to present multiple certificates on the same IP address. All modern web browsers support the SNI extension. If you have the same SAN on two or more certificates with the SNI-only option set, Akamai may serve traffic using any certificate which matches the requested SNI hostname. You should avoid multiple certificates with overlapping SAN names when using SNI-only. You can't change this setting once an enrollment is created.
        * `acknowledge_pre_verification_warnings` - (Optional) Whether you want to automatically acknowledge the validation warnings of the current job state and proceed with the execution of a change.
        * `admin_contact` - (Required) Contact information for the certificate administrator at your company.
          
          Requires these additional arguments:
          
              * `first_name` - (Required) The first name of the certificate administrator at your company.
              * `last_name` - (Required) The last name of the certificate administrator at your company.
              * `title` - (Optional) The title of the certificate administrator at your company.
              * `organization` - (Required) The name of your organization.
              * `email` - (Required) The email address of the administrator who you want to use as a contact at your company.
              * `phone` - (Required) The phone number of your organization.
              * `address_line_one` - (Required) The address of your organization.
              * `address_line_two` - (Optional) The address of your organization.
              * `city` - (Required) The city where your organization resides.
              * `region` - (Required) The region of your organization, typically a state or province.
              * `postal_code` - (Required) The postal code of your organization.
              * `country_code` - (Required) The code for the counrty where your organization resides.
        * `certificate_chain_type` - (Optional) Certificate trust chain type.
        * `csr` - (Required) 	When you create an enrollment, you also generate a certificate signing request (CSR) using CPS. CPS signs the CSR with the private key. The CSR contains all the information the CA needs to issue your certificate.
          
          Requires these additional arguments:
          
              * `country_code` - (Required) The country code for the country where your organization is located.
              * `city` - (Required) The city where your organization resides.
              * `organization` - (Required The name of your company or organization. Enter the name as it appears in all legal documents and as it appears in the legal entity filing.
              * `organizational_unit` - (Required) Your organizational unit.
              * `state` - (Required) 	Your state or province.
        * `enable_multi_stacked_certificates` - (Optional) Whether to enable an ECDSA certificate in addition to an RSA certificate. CPS automatically performs all certificate operations on both certificates, and uses the best certificate for each client connection to your secure properties. If you are pinning the certificates, you need to pin both the RSA and the ECDSA certificate.
        * `network_configuration` - (Required) The network information and TLS Metadata you want CPS to use to push the completed certificate to the network.
          
          Requires these additional arguments:
          
              * `client_mutual_authentication` - (Optional) The configuration for client mutual authentication. Specifies the trust chain that is used to verify client certificates and some configuration options.
              
                Requires these additional arguments:
              
                 * `send_ca_list_to_client` - (Optional) Whether you want to enable the server to send the certificate authority (CA) list to the client.
                 * `ocsp_enabled` - (Optional) Whether you want to enable the Online Certificate Status Protocol (OCSP) stapling for client certificates.
                 * `set_id` - (Optional) The identifier of the set of trust chains, created in the [Trust Chain Manager](https://developer.akamai.com/api/web_performance/trust_chain_manager/v1.html).
              * `disallowed_tls_versions` - (Optional) The TLS protocol version to disallow. CPS uses the TLS protocols that Akamai currently supports as a best practice.
              * `clone_dns_names` - (Optional) Whether CPS should direct traffic using all the SANs you listed in the SANs parameter when you created your enrollment.
              * `geography` - (Required) Lists where you can deploy the certificate. Either `core` to specify worldwide deployment (including China and Russia), `china+core` to specify worldwide deployment and China, or `russia+core` to specify worldwide deployment and Russia. You can only use the setting to include China and Russia if your Akamai contract specifies your ability to do so and you have approval from the Chinese and Russian government.
              * `must_have_ciphers` - (Optional) The ciphers to include for the enrollment while deploying it on the network. Defaults to `ak-akamai-default` when it is not set. For more information on cipher profiles, see [Akamai community](https://community.akamai.com/customers/s/article/SSL-TLS-Cipher-Profiles-for-Akamai-Secure-CDNrxdxm).
              * `ocsp_stapling` - (Optional) Whether to use OCSP stapling for the enrollment, either `on`, `off` or `not-set`. OCSP Stapling improves performance by including a valid OCSP response in every TLS handshake. This option allows the visitors on your site to query the Online Certificate Status Protocol (OCSP) server at regular intervals to obtain a signed time-stamped OCSP response. This response must be signed by the CA, not the server, therefore ensuring security. Disable OSCP Stapling if you want visitors to your site to contact the CA directly for an OSCP response. OCSP allows you to obtain the revocation status of a certificate.
              * `preferred_ciphers` - (Optional) Ciphers that you preferably want to include for the enrollment while deploying it on the network. Defaults to `ak-akamai-default` when it is not set. For more information on cipher profiles, see [Akamai community](https://community.akamai.com/customers/s/article/SSL-TLS-Cipher-Profiles-for-Akamai-Secure-CDNrxdxm).
              * `quic_enabled` - (Optional) Whether to use the QUIC transport layer network protocol.
        * `signature_algorithm` - (Required) The Secure Hash Algorithm (SHA) function, either `SHA-1` or `SHA-256`.
        * `tech_contact` - (Required) The technical contact within Akamai. This is the person you work closest with at Akamai and who can verify the certificate request. The CA calls this contact if there are any issues with the certificate and they can't reach the `admin_contact`.
          
          Requires these additional arguments:
          
              * `first_name` - (Required) The first name of the technical contact at Akamai.
              * `last_name` - (Required) The last name of the technical contact at Akamai.
              * `title` - (Optional) The title of the technical contact at Akamai.
              * `organization` - (Required) The name of the organization in Akamai where your technical contact works.
              * `email` - (Required) The email address of the technical contact at Akamai, accessible at the `akamai.com` domain.
              * `phone` - (Required) The phone number of the technical contact at Akamai.
              * `address_line_one` - (Required) The address for the technical contact at Akamai.
              * `address_line_two` - (Optional) The address for the technical contact at Akamai.
              * `city` - (Required) The address for the technical contact at Akamai.
              * `region` - (Required) The region for the technical contact at Akamai.
              * `postal_code` - (Required) The postal code for the technical contact at Akamai.
              * `country_code` - (Required) The country code for the technical contact at Akamai.
        * `organization` - (Required) Your organization information.
          
          Requires these additional arguments:
          
              * `name` - (Required) The name of your organization.
              * `phone` - (Required) The phone number of the administrator who you want to use as a contact at your company.
              * `address_line_one` - (Required) The address of your organization.
              * `address_line_two` - (Optional) The address of your organization.
              * `city` - (Required) The city where your organization resides.
              * `region` - (Required) The region of your organization, typically a state or province.
              * `postal_code` - (Required) The postal code of your organization.
              * `country_code` - (Required) The code for the country where your organization resides.

        ## Attributes reference

        The resource returns these attributes:

        * `registration_authority` - (Required) This value populates automatically with the `lets-encrypt` certificate type and is preserved in the `state` file.
        * `certificate_type` - (Required) This value populates automatically with the `san` certificate type and is preserved in the `state` file.
        * `validation_type` - (Required) This value populates automatically with the `dv` validation type and is preserved in the `state` file.
        * `id` - The unique identifier for this enrollment.
        * `dns_challenges` - The validation challenge for the domains listed in the certificate. To successfully perform the validation, only one challenge for each domain must be complete, either `dns_challenges` or `http_challenges`.
          
          Returns these additional attributes:
          
              * `domain` - The domain to validate.
              * `full_path` - The URL where Akamai publishes `response_body` for Let’s Encrypt to validate.
              * `response_body` - The data Let’s Encrypt expects to find served at `full_path` URL.
        * `http_challenges` - The validation challenge for the domains listed in the certificate. To successfully perform the validation, only one challenge for each domain must be complete, either `dns_challenges` or `http_challenges`.
          
          Returns these additional attributes:
          
              * `domain` - The domain to validate.
              * `full_path` - The URL where Akamai publishes `response_body` for Let’s Encrypt to validate.
              * `response_body` - The data Let’s Encrypt expects to find served at `full_path` URL.

        ## Import

        Basic Usagehcl resource "akamai_cps_dv_enrollment" "example" { # (resource arguments) } You can import your Akamai DV enrollment using a comma-delimited string of the enrollment ID and

         contract ID, optionally with the `ctr_` prefix. You have to enter the IDs in this order`enrollment_id,contract_id` For example

        ```sh
         $ pulumi import akamai:index/cpsDvEnrollment:CpsDvEnrollment example 12345,1-AB123
        ```

        :param str resource_name: The name of the resource.
        :param CpsDvEnrollmentArgs 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(CpsDvEnrollmentArgs, 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,
                 acknowledge_pre_verification_warnings: Optional[pulumi.Input[bool]] = None,
                 admin_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentAdminContactArgs']]] = None,
                 certificate_chain_type: Optional[pulumi.Input[str]] = None,
                 common_name: Optional[pulumi.Input[str]] = None,
                 contract_id: Optional[pulumi.Input[str]] = None,
                 csr: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentCsrArgs']]] = None,
                 enable_multi_stacked_certificates: Optional[pulumi.Input[bool]] = None,
                 network_configuration: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentNetworkConfigurationArgs']]] = None,
                 organization: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentOrganizationArgs']]] = None,
                 sans: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
                 secure_network: Optional[pulumi.Input[str]] = None,
                 signature_algorithm: Optional[pulumi.Input[str]] = None,
                 sni_only: Optional[pulumi.Input[bool]] = None,
                 tech_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentTechContactArgs']]] = None,
                 __props__=None):
        if opts is None:
            opts = pulumi.ResourceOptions()
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.version is None:
            opts.version = _utilities.get_version()
        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__ = CpsDvEnrollmentArgs.__new__(CpsDvEnrollmentArgs)

            __props__.__dict__["acknowledge_pre_verification_warnings"] = acknowledge_pre_verification_warnings
            if admin_contact is None and not opts.urn:
                raise TypeError("Missing required property 'admin_contact'")
            __props__.__dict__["admin_contact"] = admin_contact
            __props__.__dict__["certificate_chain_type"] = certificate_chain_type
            if common_name is None and not opts.urn:
                raise TypeError("Missing required property 'common_name'")
            __props__.__dict__["common_name"] = common_name
            if contract_id is None and not opts.urn:
                raise TypeError("Missing required property 'contract_id'")
            __props__.__dict__["contract_id"] = contract_id
            if csr is None and not opts.urn:
                raise TypeError("Missing required property 'csr'")
            __props__.__dict__["csr"] = csr
            __props__.__dict__["enable_multi_stacked_certificates"] = enable_multi_stacked_certificates
            if network_configuration is None and not opts.urn:
                raise TypeError("Missing required property 'network_configuration'")
            __props__.__dict__["network_configuration"] = network_configuration
            if organization is None and not opts.urn:
                raise TypeError("Missing required property 'organization'")
            __props__.__dict__["organization"] = organization
            __props__.__dict__["sans"] = sans
            if secure_network is None and not opts.urn:
                raise TypeError("Missing required property 'secure_network'")
            __props__.__dict__["secure_network"] = secure_network
            if signature_algorithm is None and not opts.urn:
                raise TypeError("Missing required property 'signature_algorithm'")
            __props__.__dict__["signature_algorithm"] = signature_algorithm
            if sni_only is None and not opts.urn:
                raise TypeError("Missing required property 'sni_only'")
            __props__.__dict__["sni_only"] = sni_only
            if tech_contact is None and not opts.urn:
                raise TypeError("Missing required property 'tech_contact'")
            __props__.__dict__["tech_contact"] = tech_contact
            __props__.__dict__["certificate_type"] = None
            __props__.__dict__["dns_challenges"] = None
            __props__.__dict__["http_challenges"] = None
            __props__.__dict__["registration_authority"] = None
            __props__.__dict__["validation_type"] = None
        super(CpsDvEnrollment, __self__).__init__(
            'akamai:index/cpsDvEnrollment:CpsDvEnrollment',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            acknowledge_pre_verification_warnings: Optional[pulumi.Input[bool]] = None,
            admin_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentAdminContactArgs']]] = None,
            certificate_chain_type: Optional[pulumi.Input[str]] = None,
            certificate_type: Optional[pulumi.Input[str]] = None,
            common_name: Optional[pulumi.Input[str]] = None,
            contract_id: Optional[pulumi.Input[str]] = None,
            csr: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentCsrArgs']]] = None,
            dns_challenges: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CpsDvEnrollmentDnsChallengeArgs']]]]] = None,
            enable_multi_stacked_certificates: Optional[pulumi.Input[bool]] = None,
            http_challenges: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['CpsDvEnrollmentHttpChallengeArgs']]]]] = None,
            network_configuration: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentNetworkConfigurationArgs']]] = None,
            organization: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentOrganizationArgs']]] = None,
            registration_authority: Optional[pulumi.Input[str]] = None,
            sans: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None,
            secure_network: Optional[pulumi.Input[str]] = None,
            signature_algorithm: Optional[pulumi.Input[str]] = None,
            sni_only: Optional[pulumi.Input[bool]] = None,
            tech_contact: Optional[pulumi.Input[pulumi.InputType['CpsDvEnrollmentTechContactArgs']]] = None,
            validation_type: Optional[pulumi.Input[str]] = None) -> 'CpsDvEnrollment':
        """
        Get an existing CpsDvEnrollment 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.
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _CpsDvEnrollmentState.__new__(_CpsDvEnrollmentState)

        __props__.__dict__["acknowledge_pre_verification_warnings"] = acknowledge_pre_verification_warnings
        __props__.__dict__["admin_contact"] = admin_contact
        __props__.__dict__["certificate_chain_type"] = certificate_chain_type
        __props__.__dict__["certificate_type"] = certificate_type
        __props__.__dict__["common_name"] = common_name
        __props__.__dict__["contract_id"] = contract_id
        __props__.__dict__["csr"] = csr
        __props__.__dict__["dns_challenges"] = dns_challenges
        __props__.__dict__["enable_multi_stacked_certificates"] = enable_multi_stacked_certificates
        __props__.__dict__["http_challenges"] = http_challenges
        __props__.__dict__["network_configuration"] = network_configuration
        __props__.__dict__["organization"] = organization
        __props__.__dict__["registration_authority"] = registration_authority
        __props__.__dict__["sans"] = sans
        __props__.__dict__["secure_network"] = secure_network
        __props__.__dict__["signature_algorithm"] = signature_algorithm
        __props__.__dict__["sni_only"] = sni_only
        __props__.__dict__["tech_contact"] = tech_contact
        __props__.__dict__["validation_type"] = validation_type
        return CpsDvEnrollment(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="acknowledgePreVerificationWarnings")
    def acknowledge_pre_verification_warnings(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "acknowledge_pre_verification_warnings")

    @property
    @pulumi.getter(name="adminContact")
    def admin_contact(self) -> pulumi.Output['outputs.CpsDvEnrollmentAdminContact']:
        return pulumi.get(self, "admin_contact")

    @property
    @pulumi.getter(name="certificateChainType")
    def certificate_chain_type(self) -> pulumi.Output[Optional[str]]:
        return pulumi.get(self, "certificate_chain_type")

    @property
    @pulumi.getter(name="certificateType")
    def certificate_type(self) -> pulumi.Output[str]:
        return pulumi.get(self, "certificate_type")

    @property
    @pulumi.getter(name="commonName")
    def common_name(self) -> pulumi.Output[str]:
        return pulumi.get(self, "common_name")

    @property
    @pulumi.getter(name="contractId")
    def contract_id(self) -> pulumi.Output[str]:
        return pulumi.get(self, "contract_id")

    @property
    @pulumi.getter
    def csr(self) -> pulumi.Output['outputs.CpsDvEnrollmentCsr']:
        return pulumi.get(self, "csr")

    @property
    @pulumi.getter(name="dnsChallenges")
    def dns_challenges(self) -> pulumi.Output[Sequence['outputs.CpsDvEnrollmentDnsChallenge']]:
        return pulumi.get(self, "dns_challenges")

    @property
    @pulumi.getter(name="enableMultiStackedCertificates")
    def enable_multi_stacked_certificates(self) -> pulumi.Output[Optional[bool]]:
        return pulumi.get(self, "enable_multi_stacked_certificates")

    @property
    @pulumi.getter(name="httpChallenges")
    def http_challenges(self) -> pulumi.Output[Sequence['outputs.CpsDvEnrollmentHttpChallenge']]:
        return pulumi.get(self, "http_challenges")

    @property
    @pulumi.getter(name="networkConfiguration")
    def network_configuration(self) -> pulumi.Output['outputs.CpsDvEnrollmentNetworkConfiguration']:
        return pulumi.get(self, "network_configuration")

    @property
    @pulumi.getter
    def organization(self) -> pulumi.Output['outputs.CpsDvEnrollmentOrganization']:
        return pulumi.get(self, "organization")

    @property
    @pulumi.getter(name="registrationAuthority")
    def registration_authority(self) -> pulumi.Output[str]:
        return pulumi.get(self, "registration_authority")

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

    @property
    @pulumi.getter(name="secureNetwork")
    def secure_network(self) -> pulumi.Output[str]:
        return pulumi.get(self, "secure_network")

    @property
    @pulumi.getter(name="signatureAlgorithm")
    def signature_algorithm(self) -> pulumi.Output[str]:
        return pulumi.get(self, "signature_algorithm")

    @property
    @pulumi.getter(name="sniOnly")
    def sni_only(self) -> pulumi.Output[bool]:
        return pulumi.get(self, "sni_only")

    @property
    @pulumi.getter(name="techContact")
    def tech_contact(self) -> pulumi.Output['outputs.CpsDvEnrollmentTechContact']:
        return pulumi.get(self, "tech_contact")

    @property
    @pulumi.getter(name="validationType")
    def validation_type(self) -> pulumi.Output[str]:
        return pulumi.get(self, "validation_type")

