import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * This resource provides the Security Attribute resource in Oracle Cloud Infrastructure Security Attribute service.
 * Api doc link for the resource: https://docs.oracle.com/iaas/api/#/en/security-attribute/latest/SecurityAttribute
 *
 * Example terraform configs related to the resource : https://github.com/oracle/terraform-provider-oci/tree/master/examples/security_attribute
 *
 * Creates a new security attribute in the specified security attribute namespace.
 *
 * The security attribute requires either the OCID or the name of the security attribute namespace that will contain this
 * security attribute.
 *
 * You must specify a *name* for the attribute, which must be unique across all attributes in the security attribute namespace
 * and cannot be changed. The only valid characters for security attribute names are: 0-9, A-Z, a-z, -, _ characters.
 * Names are case insensitive. That means, for example, "mySecurityAttribute" and "mysecurityattribute" are not allowed in the same namespace.
 * If you specify a name that's already in use in the security attribute namespace, a 409 error is returned.
 *
 * The security attribute must have a *description*. It does not have to be unique, and you can change it with
 * [UpdateSecurityAttribute](https://docs.cloud.oracle.com/iaas/api/#/en/securityattribute/latest/Tag/UpdateSecurityAttribute).
 *
 * When a validator is specified, The security attribute must have a value type. Security attribute can use either a static value or a list of possible values. Static values are entered by a user when applying the security attribute to a resource. Lists are created by the user and the user must apply a value from the list. Lists are validated.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as oci from "@pulumi/oci";
 *
 * const testSecurityAttribute = new oci.securityattribute.SecurityAttribute("test_security_attribute", {
 *     description: securityAttributeDescription,
 *     name: securityAttributeName,
 *     securityAttributeNamespaceId: testSecurityAttributeNamespace.id,
 *     validator: {
 *         validatorType: securityAttributeValidatorValidatorType,
 *         values: securityAttributeValidatorValues,
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * SecurityAttributes can be imported using the `id`, e.g.
 *
 * ```sh
 * $ pulumi import oci:SecurityAttribute/securityAttribute:SecurityAttribute test_security_attribute "securityAttributeNamespaces/{securityAttributeNamespaceId}/securityAttributes/{securityAttributeName}"
 * ```
 */
export declare class SecurityAttribute extends pulumi.CustomResource {
    /**
     * Get an existing SecurityAttribute 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?: SecurityAttributeState, opts?: pulumi.CustomResourceOptions): SecurityAttribute;
    /**
     * Returns true if the given object is an instance of SecurityAttribute.  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 SecurityAttribute;
    /**
     * The OCID of the compartment that contains the security attribute definition.
     */
    readonly compartmentId: pulumi.Output<string>;
    /**
     * (Updatable) The description you assign to the security attribute during creation.
     */
    readonly description: pulumi.Output<string>;
    /**
     * Indicates whether the security attribute is retired. See [Managing Security Attribute Namespaces](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/managing-security-attribute-namespaces.htm).
     */
    readonly isRetired: pulumi.Output<boolean>;
    /**
     * The name you assign to the security attribute during creation. This is the security attribute key. The name must be unique within the namespace and cannot be changed.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The OCID of the security attribute namespace.
     */
    readonly securityAttributeNamespaceId: pulumi.Output<string>;
    /**
     * The name of the security attribute namespace that contains the security attribute.
     */
    readonly securityAttributeNamespaceName: pulumi.Output<string>;
    /**
     * The security attribute's current state. After creating a security attribute, make sure its `lifecycleState` is ACTIVE before using it. After retiring a security attribute, make sure its `lifecycleState` is INACTIVE before using it. If you delete a security attribute, you cannot delete another security attribute until the deleted security attribute's `lifecycleState` changes from DELETING to DELETED.
     */
    readonly state: pulumi.Output<string>;
    /**
     * Date and time the security attribute was created, in the format defined by RFC3339.  Example: `2016-08-25T21:10:29.600Z`
     */
    readonly timeCreated: pulumi.Output<string>;
    /**
     * The data type of the security attribute.
     */
    readonly type: pulumi.Output<string>;
    /**
     * (Updatable) Validates a security attribute value. Each validator performs validation steps in addition to the standard validation for security attribute values. For more information, see [Limits on Security Attributes](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/overview.htm).
     *
     * If you define a validator after a value has been set for a security attribute, then any updates that attempt to change the value must pass the additional validation defined by the current rule. Previously set values (even those that would fail the current validation) are not updated. You can still update other attributes to resources that contain a non-valid security attribute.
     *
     * To clear the validator call UpdateSecurityAttribute with [DefaultSecuirtyAttributeValidator](https://docs.cloud.oracle.com/iaas/api/#/en/securityattribute/latest/datatypes/DefaultTagDefinitionValidator).
     */
    readonly validator: pulumi.Output<outputs.SecurityAttribute.SecurityAttributeValidator | undefined>;
    /**
     * Create a SecurityAttribute 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: SecurityAttributeArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering SecurityAttribute resources.
 */
export interface SecurityAttributeState {
    /**
     * The OCID of the compartment that contains the security attribute definition.
     */
    compartmentId?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) The description you assign to the security attribute during creation.
     */
    description?: pulumi.Input<string | undefined>;
    /**
     * Indicates whether the security attribute is retired. See [Managing Security Attribute Namespaces](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/managing-security-attribute-namespaces.htm).
     */
    isRetired?: pulumi.Input<boolean | undefined>;
    /**
     * The name you assign to the security attribute during creation. This is the security attribute key. The name must be unique within the namespace and cannot be changed.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The OCID of the security attribute namespace.
     */
    securityAttributeNamespaceId?: pulumi.Input<string | undefined>;
    /**
     * The name of the security attribute namespace that contains the security attribute.
     */
    securityAttributeNamespaceName?: pulumi.Input<string | undefined>;
    /**
     * The security attribute's current state. After creating a security attribute, make sure its `lifecycleState` is ACTIVE before using it. After retiring a security attribute, make sure its `lifecycleState` is INACTIVE before using it. If you delete a security attribute, you cannot delete another security attribute until the deleted security attribute's `lifecycleState` changes from DELETING to DELETED.
     */
    state?: pulumi.Input<string | undefined>;
    /**
     * Date and time the security attribute was created, in the format defined by RFC3339.  Example: `2016-08-25T21:10:29.600Z`
     */
    timeCreated?: pulumi.Input<string | undefined>;
    /**
     * The data type of the security attribute.
     */
    type?: pulumi.Input<string | undefined>;
    /**
     * (Updatable) Validates a security attribute value. Each validator performs validation steps in addition to the standard validation for security attribute values. For more information, see [Limits on Security Attributes](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/overview.htm).
     *
     * If you define a validator after a value has been set for a security attribute, then any updates that attempt to change the value must pass the additional validation defined by the current rule. Previously set values (even those that would fail the current validation) are not updated. You can still update other attributes to resources that contain a non-valid security attribute.
     *
     * To clear the validator call UpdateSecurityAttribute with [DefaultSecuirtyAttributeValidator](https://docs.cloud.oracle.com/iaas/api/#/en/securityattribute/latest/datatypes/DefaultTagDefinitionValidator).
     */
    validator?: pulumi.Input<inputs.SecurityAttribute.SecurityAttributeValidator | undefined>;
}
/**
 * The set of arguments for constructing a SecurityAttribute resource.
 */
export interface SecurityAttributeArgs {
    /**
     * (Updatable) The description you assign to the security attribute during creation.
     */
    description: pulumi.Input<string>;
    /**
     * Indicates whether the security attribute is retired. See [Managing Security Attribute Namespaces](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/managing-security-attribute-namespaces.htm).
     */
    isRetired?: pulumi.Input<boolean | undefined>;
    /**
     * The name you assign to the security attribute during creation. This is the security attribute key. The name must be unique within the namespace and cannot be changed.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The OCID of the security attribute namespace.
     */
    securityAttributeNamespaceId: pulumi.Input<string>;
    /**
     * (Updatable) Validates a security attribute value. Each validator performs validation steps in addition to the standard validation for security attribute values. For more information, see [Limits on Security Attributes](https://docs.cloud.oracle.com/iaas/Content/zero-trust-packet-routing/overview.htm).
     *
     * If you define a validator after a value has been set for a security attribute, then any updates that attempt to change the value must pass the additional validation defined by the current rule. Previously set values (even those that would fail the current validation) are not updated. You can still update other attributes to resources that contain a non-valid security attribute.
     *
     * To clear the validator call UpdateSecurityAttribute with [DefaultSecuirtyAttributeValidator](https://docs.cloud.oracle.com/iaas/api/#/en/securityattribute/latest/datatypes/DefaultTagDefinitionValidator).
     */
    validator?: pulumi.Input<inputs.SecurityAttribute.SecurityAttributeValidator | undefined>;
}
//# sourceMappingURL=securityAttribute.d.ts.map