import * as pulumi from "@pulumi/pulumi";
/**
 * The `consul.AclTokenPolicyAttachment` resource links a Consul Token and an ACL
 * policy. The link is implemented through an update to the Consul ACL token.
 *
 * > **NOTE:** This resource is only useful to attach policies to an ACL token
 * that has been created outside the current Terraform configuration, like the
 * anonymous or the master token. If the token you need to attach a policy to has
 * been created in the current Terraform configuration and will only be used in it,
 * you should use the `policies` attribute of [`consul.AclToken`](https://www.terraform.io/docs/providers/consul/r/acl_token.html).
 *
 * ## Example Usage
 *
 * ### Attach a policy to the anonymous token
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const agent = new consul.AclPolicy("agent", {
 *     name: "agent",
 *     rules: `node_prefix \\"\\" {
 *   policy = \\"read\\"
 * }
 * `,
 * });
 * const attachment = new consul.AclTokenPolicyAttachment("attachment", {
 *     tokenId: "00000000-0000-0000-0000-000000000002",
 *     policy: agent.name,
 * });
 * ```
 *
 * ### Attach a policy to a token created in another Terraform configuration
 *
 * ### In `first_configuration/main.tf`
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const test = new consul.AclToken("test", {
 *     accessorId: "9b20de68-3ea2-4b70-b4f1-506afad062a4",
 *     description: "my test token",
 *     local: true,
 * });
 * ```
 *
 * ### In `second_configuration/main.tf`
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const agent = new consul.AclPolicy("agent", {
 *     name: "agent",
 *     rules: `node_prefix \\"\\" {
 *   policy = \\"read\\"
 * }
 * `,
 * });
 * const attachment = new consul.AclTokenPolicyAttachment("attachment", {
 *     tokenId: "9b20de68-3ea2-4b70-b4f1-506afad062a4",
 *     policy: agent.name,
 * });
 * ```
 * **NOTE**: consul.AclToken would attempt to enforce an empty set of policies,
 * because its policies attribute is empty. For this reason it is necessary to add
 * the lifecycle clause to prevent Terraform from attempting to empty the set of
 * policies associated to the token.
 *
 * ## Import
 *
 * `consul.AclTokenPolicyAttachment` can be imported. This is especially useful to manage the
 * policies attached to the anonymous and the master tokens with Terraform:
 *
 * ```sh
 * $ pulumi import consul:index/aclTokenPolicyAttachment:AclTokenPolicyAttachment anonymous 00000000-0000-0000-0000-000000000002:policy_name
 * $ pulumi import consul:index/aclTokenPolicyAttachment:AclTokenPolicyAttachment master-token 624d94ca-bc5c-f960-4e83-0a609cf588be:policy_name
 * ```
 */
export declare class AclTokenPolicyAttachment extends pulumi.CustomResource {
    /**
     * Get an existing AclTokenPolicyAttachment 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: string, id: pulumi.Input<pulumi.ID>, state?: AclTokenPolicyAttachmentState, opts?: pulumi.CustomResourceOptions): AclTokenPolicyAttachment;
    /**
     * Returns true if the given object is an instance of AclTokenPolicyAttachment.  This is designed to work even
     * when multiple copies of the Pulumi SDK have been loaded into the same process.
     */
    static isInstance(obj: any): obj is AclTokenPolicyAttachment;
    /**
     * The name of the policy attached to the token.
     */
    readonly policy: pulumi.Output<string>;
    /**
     * The id of the token.
     */
    readonly tokenId: pulumi.Output<string>;
    /**
     * Create a AclTokenPolicyAttachment resource with the given unique name, arguments, and options.
     *
     * @param name The _unique_ name of the resource.
     * @param args The arguments to use to populate this resource's properties.
     * @param opts A bag of options that control this resource's behavior.
     */
    constructor(name: string, args: AclTokenPolicyAttachmentArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering AclTokenPolicyAttachment resources.
 */
export interface AclTokenPolicyAttachmentState {
    /**
     * The name of the policy attached to the token.
     */
    policy?: pulumi.Input<string>;
    /**
     * The id of the token.
     */
    tokenId?: pulumi.Input<string>;
}
/**
 * The set of arguments for constructing a AclTokenPolicyAttachment resource.
 */
export interface AclTokenPolicyAttachmentArgs {
    /**
     * The name of the policy attached to the token.
     */
    policy: pulumi.Input<string>;
    /**
     * The id of the token.
     */
    tokenId: pulumi.Input<string>;
}
