import * as pulumi from "@pulumi/pulumi";
import { input as inputs, output as outputs } from "../types";
/**
 * Manages an agency resource within HuaweiCloud.
 *
 * > **NOTE:** You *must* have admin privileges to use this resource.
 *
 * ## Example Usage
 * ### Delegate another HUAWEI CLOUD account to perform operations on your resources
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as huaweicloud from "@pulumi/huaweicloud";
 *
 * const agency = new huaweicloud.Iam.Agency("agency", {
 *     allResourcesRoles: ["Server Administrator"],
 *     delegatedDomainName: "***",
 *     description: "test agency",
 *     domainRoles: ["Anti-DDoS Administrator"],
 *     projectRoles: [{
 *         project: "cn-north-1",
 *         roles: ["Tenant Administrator"],
 *     }],
 * });
 * ```
 *
 * ## Import
 *
 * Agencies can be imported using the `id`, e.g. bash
 *
 * ```sh
 *  $ pulumi import huaweicloud:Iam/agency:Agency agency 0b97661f9900f23f4fc2c00971ea4dc0
 * ```
 *
 *  Note that the imported state may not be identical to your resource definition, due to `all_resources_roles` field is missing from the API response. It is generally recommended running `terraform plan` after importing an agency. You can then decide if changes should be applied to the agency, or the resource definition should be updated to align with the agency. Also you can ignore changes as below. hcl resource "huaweicloud_identity_agency" "agency" {
 *
 *  ...
 *
 *  lifecycle {
 *
 *  ignore_changes = [all_resources_roles]
 *
 *  } }
 */
export declare class Agency extends pulumi.CustomResource {
    /**
     * Get an existing Agency 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?: AgencyState, opts?: pulumi.CustomResourceOptions): Agency;
    /**
     * Returns true if the given object is an instance of Agency.  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 Agency;
    /**
     * Specifies an array of one or more role names which stand for the permissions
     * to be granted to agency on all resources, including those in enterprise projects, region-specific projects,
     * and global services under your account.
     */
    readonly allResourcesRoles: pulumi.Output<string[] | undefined>;
    /**
     * The time when the agency was created.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * Specifies the name of delegated user domain.
     */
    readonly delegatedDomainName: pulumi.Output<string | undefined>;
    /**
     * schema: Internal
     */
    readonly delegatedServiceName: pulumi.Output<string | undefined>;
    /**
     * Specifies the supplementary information about the agency. The value is a string of
     * 0 to 255 characters, excluding these characters: '**@#$%^&*<>\\**'.
     */
    readonly description: pulumi.Output<string>;
    /**
     * Specifies an array of one or more role names which stand for the permissions to be
     * granted to agency on domain.
     */
    readonly domainRoles: pulumi.Output<string[] | undefined>;
    /**
     * Specifies the validity period of an agency. The valid value are *FOREVER*, *ONEDAY*
     * or the specific days, for example, "20". The default value is *FOREVER*.
     */
    readonly duration: pulumi.Output<string | undefined>;
    /**
     * The expiration time of agency.
     */
    readonly expireTime: pulumi.Output<string>;
    /**
     * Specifies the name of agency. The name is a string of 1 to 64 characters.
     * Changing this will create a new agency.
     */
    readonly name: pulumi.Output<string>;
    /**
     * Specifies an array of one or more roles and projects which are used to grant
     * permissions to agency on project. The structure is documented below.
     */
    readonly projectRoles: pulumi.Output<outputs.Iam.AgencyProjectRole[] | undefined>;
    /**
     * Create a Agency 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?: AgencyArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Agency resources.
 */
export interface AgencyState {
    /**
     * Specifies an array of one or more role names which stand for the permissions
     * to be granted to agency on all resources, including those in enterprise projects, region-specific projects,
     * and global services under your account.
     */
    allResourcesRoles?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The time when the agency was created.
     */
    createTime?: pulumi.Input<string>;
    /**
     * Specifies the name of delegated user domain.
     */
    delegatedDomainName?: pulumi.Input<string>;
    /**
     * schema: Internal
     */
    delegatedServiceName?: pulumi.Input<string>;
    /**
     * Specifies the supplementary information about the agency. The value is a string of
     * 0 to 255 characters, excluding these characters: '**@#$%^&*<>\\**'.
     */
    description?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more role names which stand for the permissions to be
     * granted to agency on domain.
     */
    domainRoles?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Specifies the validity period of an agency. The valid value are *FOREVER*, *ONEDAY*
     * or the specific days, for example, "20". The default value is *FOREVER*.
     */
    duration?: pulumi.Input<string>;
    /**
     * The expiration time of agency.
     */
    expireTime?: pulumi.Input<string>;
    /**
     * Specifies the name of agency. The name is a string of 1 to 64 characters.
     * Changing this will create a new agency.
     */
    name?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more roles and projects which are used to grant
     * permissions to agency on project. The structure is documented below.
     */
    projectRoles?: pulumi.Input<pulumi.Input<inputs.Iam.AgencyProjectRole>[]>;
}
/**
 * The set of arguments for constructing a Agency resource.
 */
export interface AgencyArgs {
    /**
     * Specifies an array of one or more role names which stand for the permissions
     * to be granted to agency on all resources, including those in enterprise projects, region-specific projects,
     * and global services under your account.
     */
    allResourcesRoles?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Specifies the name of delegated user domain.
     */
    delegatedDomainName?: pulumi.Input<string>;
    /**
     * schema: Internal
     */
    delegatedServiceName?: pulumi.Input<string>;
    /**
     * Specifies the supplementary information about the agency. The value is a string of
     * 0 to 255 characters, excluding these characters: '**@#$%^&*<>\\**'.
     */
    description?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more role names which stand for the permissions to be
     * granted to agency on domain.
     */
    domainRoles?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Specifies the validity period of an agency. The valid value are *FOREVER*, *ONEDAY*
     * or the specific days, for example, "20". The default value is *FOREVER*.
     */
    duration?: pulumi.Input<string>;
    /**
     * Specifies the name of agency. The name is a string of 1 to 64 characters.
     * Changing this will create a new agency.
     */
    name?: pulumi.Input<string>;
    /**
     * Specifies an array of one or more roles and projects which are used to grant
     * permissions to agency on project. The structure is documented below.
     */
    projectRoles?: pulumi.Input<pulumi.Input<inputs.Iam.AgencyProjectRole>[]>;
}
