import * as pulumi from "@pulumi/pulumi";
import * as inputs from "../types/input";
import * as outputs from "../types/output";
/**
 * A Dataplex Metadata Feed monitors Dataplex metadata entries in a specified scope and publishes notifications of changes to a Cloud Pub/Sub topic.
 *
 * ## Example Usage
 *
 * ### Dataplex Metadata Feed Basic
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as gcp from "@pulumi/gcp";
 *
 * const project = gcp.organizations.getProject({});
 * const primary = new gcp.pubsub.Topic("primary", {name: "tf-test-feed-topic"});
 * const primaryPublisher = new gcp.pubsub.TopicIAMMember("primary_publisher", {
 *     topic: primary.name,
 *     role: "roles/pubsub.publisher",
 *     member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-dataplex.iam.gserviceaccount.com`),
 * });
 * const primaryViewer = new gcp.pubsub.TopicIAMMember("primary_viewer", {
 *     topic: primary.name,
 *     role: "roles/pubsub.viewer",
 *     member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-dataplex.iam.gserviceaccount.com`),
 * }, {
 *     dependsOn: [primaryPublisher],
 * });
 * const group = new gcp.dataplex.EntryGroup("group", {
 *     entryGroupId: "tf-test-feed-group",
 *     project: "my-project-name",
 *     location: "us-central1",
 * });
 * const type = new gcp.dataplex.EntryType("type", {
 *     entryTypeId: "tf-test-feed-type",
 *     project: "my-project-name",
 *     location: "us-central1",
 * });
 * const aspect = new gcp.dataplex.AspectType("aspect", {
 *     aspectTypeId: "tf-test-feed-aspect",
 *     project: "my-project-name",
 *     location: "us-central1",
 *     metadataTemplate: `{
 *   \\"name\\": \\"tf-test-template\\",
 *   \\"type\\": \\"record\\",
 *   \\"recordFields\\": [
 *     {
 *       \\"name\\": \\"type\\",
 *       \\"type\\": \\"enum\\",
 *       \\"annotations\\": {
 *         \\"displayName\\": \\"Type\\",
 *         \\"description\\": \\"Specifies the type of view represented by the entry.\\"
 *       },
 *       \\"index\\": 1,
 *       \\"constraints\\": {
 *         \\"required\\": true
 *       },
 *       \\"enumValues\\": [
 *         {
 *           \\"name\\": \\"VIEW\\",
 *           \\"index\\": 1
 *         }
 *       ]
 *     }
 *   ]
 * }
 * `,
 * });
 * const primaryMetadataFeed = new gcp.dataplex.MetadataFeed("primary", {
 *     metadataFeedId: "tf-test-feed",
 *     location: "us-central1",
 *     project: "my-project-name",
 *     pubsubTopic: primary.id,
 *     labels: {
 *         foo: "bar",
 *     },
 *     filters: {
 *         aspectTypes: [pulumi.all([project, aspect.aspectTypeId]).apply(([project, aspectTypeId]) => `projects/${project.number}/locations/us-central1/aspectTypes/${aspectTypeId}`)],
 *         changeTypes: ["CREATE"],
 *         entryTypes: [pulumi.all([project, type.entryTypeId]).apply(([project, entryTypeId]) => `projects/${project.number}/locations/us-central1/entryTypes/${entryTypeId}`)],
 *     },
 *     scope: {
 *         entryGroups: [pulumi.all([project, group.entryGroupId]).apply(([project, entryGroupId]) => `projects/${project.number}/locations/us-central1/entryGroups/${entryGroupId}`)],
 *     },
 * }, {
 *     dependsOn: [
 *         primaryPublisher,
 *         primaryViewer,
 *     ],
 * });
 * ```
 *
 * ## Import
 *
 * MetadataFeed can be imported using any of these accepted formats:
 *
 * * `projects/{{project}}/locations/{{location}}/metadataFeeds/{{metadata_feed_id}}`
 * * `{{project}}/{{location}}/{{metadata_feed_id}}`
 * * `{{location}}/{{metadata_feed_id}}`
 *
 * When using the `pulumi import` command, MetadataFeed can be imported using one of the formats above. For example:
 *
 * ```sh
 * $ pulumi import gcp:dataplex/metadataFeed:MetadataFeed default projects/{{project}}/locations/{{location}}/metadataFeeds/{{metadata_feed_id}}
 * $ pulumi import gcp:dataplex/metadataFeed:MetadataFeed default {{project}}/{{location}}/{{metadata_feed_id}}
 * $ pulumi import gcp:dataplex/metadataFeed:MetadataFeed default {{location}}/{{metadata_feed_id}}
 * ```
 */
export declare class MetadataFeed extends pulumi.CustomResource {
    /**
     * Get an existing MetadataFeed 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?: MetadataFeedState, opts?: pulumi.CustomResourceOptions): MetadataFeed;
    /**
     * Returns true if the given object is an instance of MetadataFeed.  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 MetadataFeed;
    /**
     * The time when the feed was created.
     */
    readonly createTime: pulumi.Output<string>;
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    readonly deletionPolicy: pulumi.Output<string>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    readonly effectiveLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Filters defines the type of changes that you want to listen to. You can have multiple entry type filters and multiple aspect type filters. All of the entry type filters are OR'ed together. All of the aspect type filters are OR'ed together. All of the entry type filters and aspect type filters are AND'ed together.
     * Structure is documented below.
     */
    readonly filters: pulumi.Output<outputs.dataplex.MetadataFeedFilters | undefined>;
    /**
     * User-defined labels.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    readonly labels: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
     */
    readonly location: pulumi.Output<string>;
    /**
     * The metadata job ID. If not provided, a unique ID is generated with the prefix metadata-job-.
     */
    readonly metadataFeedId: pulumi.Output<string>;
    /**
     * Identifier. The resource name of the metadata feed, in the format projects/{project_id_or_number}/locations/{location_id}/metadataFeeds/{metadata_feed_id}.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    readonly project: pulumi.Output<string>;
    /**
     * The pubsub topic that you want the metadata feed messages to publish to. Please grant Dataplex service account the permission to publish messages to the topic. The service account is: service-{PROJECT_NUMBER}@gcp-sa-dataplex.iam.gserviceaccount.com.
     */
    readonly pubsubTopic: pulumi.Output<string | undefined>;
    /**
     * The combination of labels configured directly on the resource
     *  and default labels configured on the provider.
     */
    readonly pulumiLabels: pulumi.Output<{
        [key: string]: string;
    }>;
    /**
     * Scope defines the scope of the metadata feed. Scopes are exclusive. Only one of the scopes can be specified.
     * Structure is documented below.
     */
    readonly scope: pulumi.Output<outputs.dataplex.MetadataFeedScope>;
    /**
     * A system-generated, globally unique ID for the metadata job. If the metadata job is deleted and then re-created with the same name, this ID is different.
     */
    readonly uid: pulumi.Output<string>;
    /**
     * The time when the feed was updated.
     */
    readonly updateTime: pulumi.Output<string>;
    /**
     * Create a MetadataFeed 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: MetadataFeedArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering MetadataFeed resources.
 */
export interface MetadataFeedState {
    /**
     * The time when the feed was created.
     */
    createTime?: pulumi.Input<string | undefined>;
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    deletionPolicy?: pulumi.Input<string | undefined>;
    /**
     * All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Pulumi, other clients and services.
     */
    effectiveLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * Filters defines the type of changes that you want to listen to. You can have multiple entry type filters and multiple aspect type filters. All of the entry type filters are OR'ed together. All of the aspect type filters are OR'ed together. All of the entry type filters and aspect type filters are AND'ed together.
     * Structure is documented below.
     */
    filters?: pulumi.Input<inputs.dataplex.MetadataFeedFilters | undefined>;
    /**
     * User-defined labels.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
     */
    location?: pulumi.Input<string | undefined>;
    /**
     * The metadata job ID. If not provided, a unique ID is generated with the prefix metadata-job-.
     */
    metadataFeedId?: pulumi.Input<string | undefined>;
    /**
     * Identifier. The resource name of the metadata feed, in the format projects/{project_id_or_number}/locations/{location_id}/metadataFeeds/{metadata_feed_id}.
     */
    name?: pulumi.Input<string | undefined>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string | undefined>;
    /**
     * The pubsub topic that you want the metadata feed messages to publish to. Please grant Dataplex service account the permission to publish messages to the topic. The service account is: service-{PROJECT_NUMBER}@gcp-sa-dataplex.iam.gserviceaccount.com.
     */
    pubsubTopic?: pulumi.Input<string | undefined>;
    /**
     * The combination of labels configured directly on the resource
     *  and default labels configured on the provider.
     */
    pulumiLabels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * Scope defines the scope of the metadata feed. Scopes are exclusive. Only one of the scopes can be specified.
     * Structure is documented below.
     */
    scope?: pulumi.Input<inputs.dataplex.MetadataFeedScope | undefined>;
    /**
     * A system-generated, globally unique ID for the metadata job. If the metadata job is deleted and then re-created with the same name, this ID is different.
     */
    uid?: pulumi.Input<string | undefined>;
    /**
     * The time when the feed was updated.
     */
    updateTime?: pulumi.Input<string | undefined>;
}
/**
 * The set of arguments for constructing a MetadataFeed resource.
 */
export interface MetadataFeedArgs {
    /**
     * Whether Terraform will be prevented from destroying the resource. Defaults to DELETE.
     * When a 'terraform destroy' or 'pulumi up' would delete the resource,
     * the command will fail if this field is set to "PREVENT" in Terraform state.
     * When set to "ABANDON", the command will remove the resource from Terraform
     * management without updating or deleting the resource in the API.
     * When set to "DELETE", deleting the resource is allowed.
     */
    deletionPolicy?: pulumi.Input<string | undefined>;
    /**
     * Filters defines the type of changes that you want to listen to. You can have multiple entry type filters and multiple aspect type filters. All of the entry type filters are OR'ed together. All of the aspect type filters are OR'ed together. All of the entry type filters and aspect type filters are AND'ed together.
     * Structure is documented below.
     */
    filters?: pulumi.Input<inputs.dataplex.MetadataFeedFilters | undefined>;
    /**
     * User-defined labels.
     * **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
     * Please refer to the field `effectiveLabels` for all of the labels present on the resource.
     */
    labels?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    } | undefined>;
    /**
     * Resource ID segment making up resource `name`. It identifies the resource within its parent collection as described in https://google.aip.dev/122.
     */
    location: pulumi.Input<string>;
    /**
     * The metadata job ID. If not provided, a unique ID is generated with the prefix metadata-job-.
     */
    metadataFeedId: pulumi.Input<string>;
    /**
     * The ID of the project in which the resource belongs.
     * If it is not provided, the provider project is used.
     */
    project?: pulumi.Input<string | undefined>;
    /**
     * The pubsub topic that you want the metadata feed messages to publish to. Please grant Dataplex service account the permission to publish messages to the topic. The service account is: service-{PROJECT_NUMBER}@gcp-sa-dataplex.iam.gserviceaccount.com.
     */
    pubsubTopic?: pulumi.Input<string | undefined>;
    /**
     * Scope defines the scope of the metadata feed. Scopes are exclusive. Only one of the scopes can be specified.
     * Structure is documented below.
     */
    scope: pulumi.Input<inputs.dataplex.MetadataFeedScope>;
}
//# sourceMappingURL=metadataFeed.d.ts.map