import * as pulumi from "@pulumi/pulumi";
import * as inputs from "./types/input";
import * as outputs from "./types/output";
/**
 * A high-level resource for creating a Service in Consul in the Consul catalog. This
 * is appropriate for registering [external services](https://www.consul.io/docs/guides/external.html) and
 * can be used to create services addressable by Consul that cannot be registered
 * with a [local agent](https://www.consul.io/docs/agent/basics.html).
 *
 * > **NOTE:** If a Consul agent is running on the node where this service is
 * registered, it is not recommended to use this resource as the service will be
 * removed during the next [anti-entropy synchronization](https://www.consul.io/docs/architecture/anti-entropy).
 *
 * ## Example Usage
 *
 * Creating a new node with the service:
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const compute = new consul.Node("compute", {
 *     name: "compute-google",
 *     address: "www.google.com",
 * });
 * const google = new consul.Service("google", {
 *     name: "google",
 *     node: compute.name,
 *     port: 80,
 *     tags: ["tag0"],
 * });
 * ```
 *
 * Utilizing an existing known node:
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const google = new consul.Service("google", {
 *     name: "google",
 *     node: "google",
 *     port: 443,
 * });
 * ```
 *
 * Register a health-check:
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as consul from "@pulumi/consul";
 *
 * const redis = new consul.Service("redis", {
 *     name: "redis",
 *     node: "redis",
 *     port: 6379,
 *     checks: [{
 *         checkId: "service:redis1",
 *         name: "Redis health check",
 *         status: "passing",
 *         http: "https://www.hashicorptest.com",
 *         tlsSkipVerify: false,
 *         method: "PUT",
 *         interval: "5s",
 *         timeout: "1s",
 *         deregisterCriticalServiceAfter: "30s",
 *         headers: [
 *             {
 *                 name: "foo",
 *                 values: ["test"],
 *             },
 *             {
 *                 name: "bar",
 *                 values: ["test"],
 *             },
 *         ],
 *     }],
 * });
 * ```
 */
export declare class Service extends pulumi.CustomResource {
    /**
     * Get an existing Service 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?: ServiceState, opts?: pulumi.CustomResourceOptions): Service;
    /**
     * Returns true if the given object is an instance of Service.  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 Service;
    /**
     * The address of the service. Defaults to the address of the node.
     */
    readonly address: pulumi.Output<string>;
    readonly checks: pulumi.Output<outputs.ServiceCheck[] | undefined>;
    /**
     * The datacenter to use. This overrides the agent's default datacenter and the datacenter in the provider setup.
     */
    readonly datacenter: pulumi.Output<string>;
    /**
     * Specifies to disable the anti-entropy feature for this service's tags. Defaults to `false`.
     */
    readonly enableTagOverride: pulumi.Output<boolean | undefined>;
    /**
     * @deprecated The external field has been deprecated and does nothing.
     */
    readonly external: pulumi.Output<boolean | undefined>;
    /**
     * A map of arbitrary KV metadata linked to the service instance.
     */
    readonly meta: pulumi.Output<{
        [key: string]: string;
    } | undefined>;
    /**
     * The name of the service.
     */
    readonly name: pulumi.Output<string>;
    /**
     * The namespace to create the service within.
     */
    readonly namespace: pulumi.Output<string | undefined>;
    /**
     * The name of the node the to register the service on.
     */
    readonly node: pulumi.Output<string>;
    /**
     * The partition the service is associated with.
     */
    readonly partition: pulumi.Output<string | undefined>;
    /**
     * The port of the service.
     */
    readonly port: pulumi.Output<number | undefined>;
    /**
     * If the service ID is not provided, it will be defaulted to the value of the `name` attribute.
     */
    readonly serviceId: pulumi.Output<string>;
    /**
     * A list of values that are opaque to Consul, but can be used to distinguish between services or nodes.
     */
    readonly tags: pulumi.Output<string[] | undefined>;
    /**
     * Object that configures how the service responds to DNS SRV requests based on the service's health status. You can specify one or more of the following states and configure an integer value indicating its weight: `passing`, `warning`.
     */
    readonly weights: pulumi.Output<{
        [key: string]: number;
    } | undefined>;
    /**
     * Create a Service 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: ServiceArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering Service resources.
 */
export interface ServiceState {
    /**
     * The address of the service. Defaults to the address of the node.
     */
    address?: pulumi.Input<string>;
    checks?: pulumi.Input<pulumi.Input<inputs.ServiceCheck>[]>;
    /**
     * The datacenter to use. This overrides the agent's default datacenter and the datacenter in the provider setup.
     */
    datacenter?: pulumi.Input<string>;
    /**
     * Specifies to disable the anti-entropy feature for this service's tags. Defaults to `false`.
     */
    enableTagOverride?: pulumi.Input<boolean>;
    /**
     * @deprecated The external field has been deprecated and does nothing.
     */
    external?: pulumi.Input<boolean>;
    /**
     * A map of arbitrary KV metadata linked to the service instance.
     */
    meta?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The name of the service.
     */
    name?: pulumi.Input<string>;
    /**
     * The namespace to create the service within.
     */
    namespace?: pulumi.Input<string>;
    /**
     * The name of the node the to register the service on.
     */
    node?: pulumi.Input<string>;
    /**
     * The partition the service is associated with.
     */
    partition?: pulumi.Input<string>;
    /**
     * The port of the service.
     */
    port?: pulumi.Input<number>;
    /**
     * If the service ID is not provided, it will be defaulted to the value of the `name` attribute.
     */
    serviceId?: pulumi.Input<string>;
    /**
     * A list of values that are opaque to Consul, but can be used to distinguish between services or nodes.
     */
    tags?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Object that configures how the service responds to DNS SRV requests based on the service's health status. You can specify one or more of the following states and configure an integer value indicating its weight: `passing`, `warning`.
     */
    weights?: pulumi.Input<{
        [key: string]: pulumi.Input<number>;
    }>;
}
/**
 * The set of arguments for constructing a Service resource.
 */
export interface ServiceArgs {
    /**
     * The address of the service. Defaults to the address of the node.
     */
    address?: pulumi.Input<string>;
    checks?: pulumi.Input<pulumi.Input<inputs.ServiceCheck>[]>;
    /**
     * The datacenter to use. This overrides the agent's default datacenter and the datacenter in the provider setup.
     */
    datacenter?: pulumi.Input<string>;
    /**
     * Specifies to disable the anti-entropy feature for this service's tags. Defaults to `false`.
     */
    enableTagOverride?: pulumi.Input<boolean>;
    /**
     * @deprecated The external field has been deprecated and does nothing.
     */
    external?: pulumi.Input<boolean>;
    /**
     * A map of arbitrary KV metadata linked to the service instance.
     */
    meta?: pulumi.Input<{
        [key: string]: pulumi.Input<string>;
    }>;
    /**
     * The name of the service.
     */
    name?: pulumi.Input<string>;
    /**
     * The namespace to create the service within.
     */
    namespace?: pulumi.Input<string>;
    /**
     * The name of the node the to register the service on.
     */
    node: pulumi.Input<string>;
    /**
     * The partition the service is associated with.
     */
    partition?: pulumi.Input<string>;
    /**
     * The port of the service.
     */
    port?: pulumi.Input<number>;
    /**
     * If the service ID is not provided, it will be defaulted to the value of the `name` attribute.
     */
    serviceId?: pulumi.Input<string>;
    /**
     * A list of values that are opaque to Consul, but can be used to distinguish between services or nodes.
     */
    tags?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * Object that configures how the service responds to DNS SRV requests based on the service's health status. You can specify one or more of the following states and configure an integer value indicating its weight: `passing`, `warning`.
     */
    weights?: pulumi.Input<{
        [key: string]: pulumi.Input<number>;
    }>;
}
