"use strict";
// *** WARNING: this file was generated by pulumi-language-nodejs. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Certificate = void 0;
const pulumi = __importStar(require("@pulumi/pulumi"));
const utilities = __importStar(require("../utilities"));
/**
 * This resource provides the Certificate resource in Oracle Cloud Infrastructure Load Balancer service.
 * Api doc link for the resource: https://docs.oracle.com/iaas/api/#/en/loadbalancer/latest/Certificate
 *
 * Example terraform configs related to the resource : https://github.com/oracle/terraform-provider-oci/tree/master/examples/load_balancer
 *
 * Creates an asynchronous request to add an SSL certificate bundle.
 *
 * Set the terraform flag `lifecycle { createBeforeDestroy = true }` in your certificate to facilitate rotating certificates.
 * A certificate cannot be deleted if it is attached to another resource (a listener or a backend set for example).
 * Because certificateName in the listener is an updatable parameter, terraform will attempt to recreate the certificate first and then update the listener but the certificate cannot be deleted while it is attached to a listener so it will fail.
 * Setting the flag makes it so that when a certificate is recreated, the new certificate will be created first before the old one gets deleted.
 * Whenever you change any values on a certificate that causes it to be recreated the certificateName MUST also change. Otherwise you will get an error saying that a certificate with that name already exists.
 *
 * ## Import
 *
 * Certificates can be imported using the `id`, e.g.
 *
 * ```sh
 * $ pulumi import oci:LoadBalancer/certificate:Certificate test_certificate "loadBalancers/{loadBalancerId}/certificates/{certificateName}"
 * ```
 */
class Certificate extends pulumi.CustomResource {
    /**
     * Get an existing Certificate resource's state with the given name, ID, and optional extra
     * properties used to qualify the lookup.
     *
     * @param name The _unique_ name of the resulting resource.
     * @param id The _unique_ provider ID of the resource to lookup.
     * @param state Any extra arguments used during the lookup.
     * @param opts Optional settings to control the behavior of the CustomResource.
     */
    static get(name, id, state, opts) {
        return new Certificate(name, state, { ...opts, id: id });
    }
    /** @internal */
    static __pulumiType = 'oci:LoadBalancer/certificate:Certificate';
    /**
     * Returns true if the given object is an instance of Certificate.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj) {
        if (obj === undefined || obj === null) {
            return false;
        }
        return obj['__pulumiType'] === Certificate.__pulumiType;
    }
    constructor(name, argsOrState, opts) {
        let resourceInputs = {};
        opts = opts || {};
        if (opts.id) {
            const state = argsOrState;
            resourceInputs["caCertificate"] = state?.caCertificate;
            resourceInputs["certificateName"] = state?.certificateName;
            resourceInputs["loadBalancerId"] = state?.loadBalancerId;
            resourceInputs["passphrase"] = state?.passphrase;
            resourceInputs["privateKey"] = state?.privateKey;
            resourceInputs["publicCertificate"] = state?.publicCertificate;
            resourceInputs["state"] = state?.state;
        }
        else {
            const args = argsOrState;
            if (args?.certificateName === undefined && !opts.urn) {
                throw new Error("Missing required property 'certificateName'");
            }
            if (args?.loadBalancerId === undefined && !opts.urn) {
                throw new Error("Missing required property 'loadBalancerId'");
            }
            resourceInputs["caCertificate"] = args?.caCertificate;
            resourceInputs["certificateName"] = args?.certificateName;
            resourceInputs["loadBalancerId"] = args?.loadBalancerId;
            resourceInputs["passphrase"] = args?.passphrase ? pulumi.secret(args.passphrase) : undefined;
            resourceInputs["privateKey"] = args?.privateKey ? pulumi.secret(args.privateKey) : undefined;
            resourceInputs["publicCertificate"] = args?.publicCertificate;
            resourceInputs["state"] = undefined /*out*/;
        }
        opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
        const secretOpts = { additionalSecretOutputs: ["passphrase", "privateKey"] };
        opts = pulumi.mergeOptions(opts, secretOpts);
        super(Certificate.__pulumiType, name, resourceInputs, opts);
    }
}
exports.Certificate = Certificate;
//# sourceMappingURL=certificate.js.map