"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.DrgAttachmentManagement = void 0;
const pulumi = __importStar(require("@pulumi/pulumi"));
const utilities = __importStar(require("../utilities"));
/**
 * This resource provides the Drg Attachment Management resource in Oracle Cloud Infrastructure Core service.
 *
 * This can be used to update the Drg Attachments of the following types -
 * "IPSEC_TUNNEL",
 * "REMOTE_PEERING_CONNECTION",
 * "VIRTUAL_CIRCUIT",
 *
 * DRG Attachments for virtual circuits, IPSec tunnels, and remote peering connections are created (and deleted) automatically on your behalf when you create (or delete) the network object. Hence, this management resource is used to update these types of autogenerated DRG Attachments.
 * The user cannot create DRG attachments of these types as needed.
 *
 * For the purposes of access control, the DRG attachment is automatically placed into the currently selected compartment.
 * For more information about compartments and access control, see
 * [Overview of the IAM Service](https://docs.cloud.oracle.com/iaas/Content/Identity/Concepts/overview.htm).
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as oci from "@pulumi/oci";
 *
 * const testDrgRpcAttachment = new oci.core.DrgAttachmentManagement("test_drg_rpc_attachment", {
 *     attachmentType: "REMOTE_PEERING_CONNECTION",
 *     compartmentId: compartmentOcid,
 *     networkId: testRpc.id,
 *     drgId: testDrg.id,
 *     displayName: "MyTestDrgAttachmentForRpc",
 *     drgRouteTableId: testDrgRouteTable.id,
 * });
 * ```
 */
class DrgAttachmentManagement extends pulumi.CustomResource {
    /**
     * Get an existing DrgAttachmentManagement 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 DrgAttachmentManagement(name, state, { ...opts, id: id });
    }
    /** @internal */
    static __pulumiType = 'oci:Core/drgAttachmentManagement:DrgAttachmentManagement';
    /**
     * Returns true if the given object is an instance of DrgAttachmentManagement.  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'] === DrgAttachmentManagement.__pulumiType;
    }
    constructor(name, argsOrState, opts) {
        let resourceInputs = {};
        opts = opts || {};
        if (opts.id) {
            const state = argsOrState;
            resourceInputs["attachmentType"] = state?.attachmentType;
            resourceInputs["compartmentId"] = state?.compartmentId;
            resourceInputs["definedTags"] = state?.definedTags;
            resourceInputs["displayName"] = state?.displayName;
            resourceInputs["drgId"] = state?.drgId;
            resourceInputs["drgRouteTableId"] = state?.drgRouteTableId;
            resourceInputs["exportDrgRouteDistributionId"] = state?.exportDrgRouteDistributionId;
            resourceInputs["freeformTags"] = state?.freeformTags;
            resourceInputs["isCrossTenancy"] = state?.isCrossTenancy;
            resourceInputs["networkDetails"] = state?.networkDetails;
            resourceInputs["networkId"] = state?.networkId;
            resourceInputs["removeExportDrgRouteDistributionTrigger"] = state?.removeExportDrgRouteDistributionTrigger;
            resourceInputs["routeTableId"] = state?.routeTableId;
            resourceInputs["state"] = state?.state;
            resourceInputs["timeCreated"] = state?.timeCreated;
            resourceInputs["vcnId"] = state?.vcnId;
        }
        else {
            const args = argsOrState;
            if (args?.attachmentType === undefined && !opts.urn) {
                throw new Error("Missing required property 'attachmentType'");
            }
            if (args?.compartmentId === undefined && !opts.urn) {
                throw new Error("Missing required property 'compartmentId'");
            }
            if (args?.drgId === undefined && !opts.urn) {
                throw new Error("Missing required property 'drgId'");
            }
            resourceInputs["attachmentType"] = args?.attachmentType;
            resourceInputs["compartmentId"] = args?.compartmentId;
            resourceInputs["definedTags"] = args?.definedTags;
            resourceInputs["displayName"] = args?.displayName;
            resourceInputs["drgId"] = args?.drgId;
            resourceInputs["drgRouteTableId"] = args?.drgRouteTableId;
            resourceInputs["exportDrgRouteDistributionId"] = args?.exportDrgRouteDistributionId;
            resourceInputs["freeformTags"] = args?.freeformTags;
            resourceInputs["networkDetails"] = args?.networkDetails;
            resourceInputs["networkId"] = args?.networkId;
            resourceInputs["removeExportDrgRouteDistributionTrigger"] = args?.removeExportDrgRouteDistributionTrigger;
            resourceInputs["routeTableId"] = args?.routeTableId;
            resourceInputs["vcnId"] = args?.vcnId;
            resourceInputs["isCrossTenancy"] = undefined /*out*/;
            resourceInputs["state"] = undefined /*out*/;
            resourceInputs["timeCreated"] = undefined /*out*/;
        }
        opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts);
        super(DrgAttachmentManagement.__pulumiType, name, resourceInputs, opts);
    }
}
exports.DrgAttachmentManagement = DrgAttachmentManagement;
//# sourceMappingURL=drgAttachmentManagement.js.map