import * as pulumi from "@pulumi/pulumi";
import * as inputs from "./types/input";
import * as outputs from "./types/output";
/**
 * Resource for creating am infrastructure definition. This resource uses the config-as-code API's. When updating the `name` or `path` of this resource you should typically also set the `createBeforeDestroy = true` lifecycle setting.
 *
 * ## Example Usage
 *
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as harness from "@lbrlabs/pulumi-harness";
 *
 * // Creating a Kubernetes infrastructure definition
 * const devKubernetes = new harness.cloudprovider.Kubernetes("devKubernetes", {authentication: {
 *     delegateSelectors: ["k8s"],
 * }});
 * const example = new harness.Application("example", {});
 * const devEnvironment = new harness.Environment("devEnvironment", {
 *     appId: example.id,
 *     type: "NON_PROD",
 * });
 * // Creating a infrastructure of type KUBERNETES
 * const k8s = new harness.InfrastructureDefinition("k8s", {
 *     appId: example.id,
 *     envId: devEnvironment.id,
 *     cloudProviderType: "KUBERNETES_CLUSTER",
 *     deploymentType: "KUBERNETES",
 *     kubernetes: {
 *         cloudProviderName: devKubernetes.name,
 *         namespace: "dev",
 *         releaseName: "${service.name}",
 *     },
 * });
 * // Creating a Deployment Template for CUSTOM infrastructure type
 * const exampleYaml = new harness.YamlConfig("exampleYaml", {
 *     path: "Setup/Template Library/Example Folder/deployment_template.yaml",
 *     content: `harnessApiVersion: '1.0'
 * type: CUSTOM_DEPLOYMENT_TYPE
 * fetchInstanceScript: |-
 *   set -ex
 *   curl http://${url}/${file_name} > ${INSTANCE_OUTPUT_PATH}
 * hostAttributes:
 *   hostname: host
 * hostObjectArrayPath: hosts
 * variables:
 * - name: url
 * - name: file_name
 * `,
 * });
 * // Creating a infrastructure of type CUSTOM
 * const custom = new harness.InfrastructureDefinition("custom", {
 *     appId: example.id,
 *     envId: devEnvironment.id,
 *     cloudProviderType: "CUSTOM",
 *     deploymentType: "CUSTOM",
 *     deploymentTemplateUri: pulumi.interpolate`Example Folder/${exampleYaml.name}`,
 *     custom: {
 *         deploymentTypeTemplateVersion: "1",
 *         variables: [
 *             {
 *                 name: "url",
 *                 value: "localhost:8081",
 *             },
 *             {
 *                 name: "file_name",
 *                 value: "instances.json",
 *             },
 *         ],
 *     },
 * });
 * ```
 *
 * ## Import
 *
 * Import using the Harness application id, environment id, and infrastructure definition id
 *
 * ```sh
 *  $ pulumi import harness:index/infrastructureDefinition:InfrastructureDefinition example <app_id>/<env_id>/<infradef_id>
 * ```
 */
export declare class InfrastructureDefinition extends pulumi.CustomResource {
    /**
     * Get an existing InfrastructureDefinition 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?: InfrastructureDefinitionState, opts?: pulumi.CustomResourceOptions): InfrastructureDefinition;
    /**
     * Returns true if the given object is an instance of InfrastructureDefinition.  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 InfrastructureDefinition;
    /**
     * The id of the application the infrastructure definition belongs to.
     */
    readonly appId: pulumi.Output<string>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    readonly awsAmi: pulumi.Output<outputs.InfrastructureDefinitionAwsAmi | undefined>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    readonly awsEcs: pulumi.Output<outputs.InfrastructureDefinitionAwsEcs | undefined>;
    /**
     * The configuration details for Aws Lambda deployments.
     */
    readonly awsLambda: pulumi.Output<outputs.InfrastructureDefinitionAwsLambda | undefined>;
    /**
     * The configuration details for AWS SSH deployments.
     */
    readonly awsSsh: pulumi.Output<outputs.InfrastructureDefinitionAwsSsh | undefined>;
    /**
     * The configuration details for AWS WinRM deployments.
     */
    readonly awsWinrm: pulumi.Output<outputs.InfrastructureDefinitionAwsWinrm | undefined>;
    /**
     * The configuration details for Azure VMSS deployments.
     */
    readonly azureVmss: pulumi.Output<outputs.InfrastructureDefinitionAzureVmss | undefined>;
    /**
     * The configuration details for Azure WebApp deployments.
     */
    readonly azureWebapp: pulumi.Output<outputs.InfrastructureDefinitionAzureWebapp | undefined>;
    /**
     * The type of the cloud provider to connect with. Valid options are AWS, AZURE, CUSTOM, PHYSICAL*DATA*CENTER, KUBERNETES*CLUSTER, PCF, SPOT*INST
     */
    readonly cloudProviderType: pulumi.Output<string>;
    /**
     * The configuration details for Custom deployments.
     */
    readonly custom: pulumi.Output<outputs.InfrastructureDefinitionCustom | undefined>;
    /**
     * The configuration details for SSH datacenter deployments.
     */
    readonly datacenterSsh: pulumi.Output<outputs.InfrastructureDefinitionDatacenterSsh | undefined>;
    /**
     * The configuration details for WinRM datacenter deployments.
     */
    readonly datacenterWinrm: pulumi.Output<outputs.InfrastructureDefinitionDatacenterWinrm | undefined>;
    /**
     * The URI of the deployment template to use. Only used if deploymentType is `CUSTOM`.
     */
    readonly deploymentTemplateUri: pulumi.Output<string | undefined>;
    /**
     * The type of the deployment to use. Valid options are AMI, AWS*CODEDEPLOY, AWS*LAMBDA, AZURE*VMSS, AZURE*WEBAPP, CUSTOM, ECS, HELM, KUBERNETES, PCF, SSH, WINRM
     */
    readonly deploymentType: pulumi.Output<string>;
    /**
     * The id of the environment the infrastructure definition belongs to.
     */
    readonly envId: pulumi.Output<string>;
    /**
     * The configuration details for Kubernetes deployments.
     */
    readonly kubernetes: pulumi.Output<outputs.InfrastructureDefinitionKubernetes | undefined>;
    /**
     * The configuration details for Kubernetes on GCP deployments.
     */
    readonly kubernetesGcp: pulumi.Output<outputs.InfrastructureDefinitionKubernetesGcp | undefined>;
    /**
     * The name of the infrastructure definition
     */
    readonly name: pulumi.Output<string>;
    /**
     * The name of the infrastructure provisioner to use.
     */
    readonly provisionerName: pulumi.Output<string | undefined>;
    /**
     * The list of service names to scope this infrastructure definition to.
     */
    readonly scopedServices: pulumi.Output<string[] | undefined>;
    /**
     * The configuration details for PCF deployments.
     */
    readonly tanzu: pulumi.Output<outputs.InfrastructureDefinitionTanzu | undefined>;
    /**
     * Create a InfrastructureDefinition 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: InfrastructureDefinitionArgs, opts?: pulumi.CustomResourceOptions);
}
/**
 * Input properties used for looking up and filtering InfrastructureDefinition resources.
 */
export interface InfrastructureDefinitionState {
    /**
     * The id of the application the infrastructure definition belongs to.
     */
    appId?: pulumi.Input<string>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    awsAmi?: pulumi.Input<inputs.InfrastructureDefinitionAwsAmi>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    awsEcs?: pulumi.Input<inputs.InfrastructureDefinitionAwsEcs>;
    /**
     * The configuration details for Aws Lambda deployments.
     */
    awsLambda?: pulumi.Input<inputs.InfrastructureDefinitionAwsLambda>;
    /**
     * The configuration details for AWS SSH deployments.
     */
    awsSsh?: pulumi.Input<inputs.InfrastructureDefinitionAwsSsh>;
    /**
     * The configuration details for AWS WinRM deployments.
     */
    awsWinrm?: pulumi.Input<inputs.InfrastructureDefinitionAwsWinrm>;
    /**
     * The configuration details for Azure VMSS deployments.
     */
    azureVmss?: pulumi.Input<inputs.InfrastructureDefinitionAzureVmss>;
    /**
     * The configuration details for Azure WebApp deployments.
     */
    azureWebapp?: pulumi.Input<inputs.InfrastructureDefinitionAzureWebapp>;
    /**
     * The type of the cloud provider to connect with. Valid options are AWS, AZURE, CUSTOM, PHYSICAL*DATA*CENTER, KUBERNETES*CLUSTER, PCF, SPOT*INST
     */
    cloudProviderType?: pulumi.Input<string>;
    /**
     * The configuration details for Custom deployments.
     */
    custom?: pulumi.Input<inputs.InfrastructureDefinitionCustom>;
    /**
     * The configuration details for SSH datacenter deployments.
     */
    datacenterSsh?: pulumi.Input<inputs.InfrastructureDefinitionDatacenterSsh>;
    /**
     * The configuration details for WinRM datacenter deployments.
     */
    datacenterWinrm?: pulumi.Input<inputs.InfrastructureDefinitionDatacenterWinrm>;
    /**
     * The URI of the deployment template to use. Only used if deploymentType is `CUSTOM`.
     */
    deploymentTemplateUri?: pulumi.Input<string>;
    /**
     * The type of the deployment to use. Valid options are AMI, AWS*CODEDEPLOY, AWS*LAMBDA, AZURE*VMSS, AZURE*WEBAPP, CUSTOM, ECS, HELM, KUBERNETES, PCF, SSH, WINRM
     */
    deploymentType?: pulumi.Input<string>;
    /**
     * The id of the environment the infrastructure definition belongs to.
     */
    envId?: pulumi.Input<string>;
    /**
     * The configuration details for Kubernetes deployments.
     */
    kubernetes?: pulumi.Input<inputs.InfrastructureDefinitionKubernetes>;
    /**
     * The configuration details for Kubernetes on GCP deployments.
     */
    kubernetesGcp?: pulumi.Input<inputs.InfrastructureDefinitionKubernetesGcp>;
    /**
     * The name of the infrastructure definition
     */
    name?: pulumi.Input<string>;
    /**
     * The name of the infrastructure provisioner to use.
     */
    provisionerName?: pulumi.Input<string>;
    /**
     * The list of service names to scope this infrastructure definition to.
     */
    scopedServices?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The configuration details for PCF deployments.
     */
    tanzu?: pulumi.Input<inputs.InfrastructureDefinitionTanzu>;
}
/**
 * The set of arguments for constructing a InfrastructureDefinition resource.
 */
export interface InfrastructureDefinitionArgs {
    /**
     * The id of the application the infrastructure definition belongs to.
     */
    appId: pulumi.Input<string>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    awsAmi?: pulumi.Input<inputs.InfrastructureDefinitionAwsAmi>;
    /**
     * The configuration details for Aws AMI deployments.
     */
    awsEcs?: pulumi.Input<inputs.InfrastructureDefinitionAwsEcs>;
    /**
     * The configuration details for Aws Lambda deployments.
     */
    awsLambda?: pulumi.Input<inputs.InfrastructureDefinitionAwsLambda>;
    /**
     * The configuration details for AWS SSH deployments.
     */
    awsSsh?: pulumi.Input<inputs.InfrastructureDefinitionAwsSsh>;
    /**
     * The configuration details for AWS WinRM deployments.
     */
    awsWinrm?: pulumi.Input<inputs.InfrastructureDefinitionAwsWinrm>;
    /**
     * The configuration details for Azure VMSS deployments.
     */
    azureVmss?: pulumi.Input<inputs.InfrastructureDefinitionAzureVmss>;
    /**
     * The configuration details for Azure WebApp deployments.
     */
    azureWebapp?: pulumi.Input<inputs.InfrastructureDefinitionAzureWebapp>;
    /**
     * The type of the cloud provider to connect with. Valid options are AWS, AZURE, CUSTOM, PHYSICAL*DATA*CENTER, KUBERNETES*CLUSTER, PCF, SPOT*INST
     */
    cloudProviderType: pulumi.Input<string>;
    /**
     * The configuration details for Custom deployments.
     */
    custom?: pulumi.Input<inputs.InfrastructureDefinitionCustom>;
    /**
     * The configuration details for SSH datacenter deployments.
     */
    datacenterSsh?: pulumi.Input<inputs.InfrastructureDefinitionDatacenterSsh>;
    /**
     * The configuration details for WinRM datacenter deployments.
     */
    datacenterWinrm?: pulumi.Input<inputs.InfrastructureDefinitionDatacenterWinrm>;
    /**
     * The URI of the deployment template to use. Only used if deploymentType is `CUSTOM`.
     */
    deploymentTemplateUri?: pulumi.Input<string>;
    /**
     * The type of the deployment to use. Valid options are AMI, AWS*CODEDEPLOY, AWS*LAMBDA, AZURE*VMSS, AZURE*WEBAPP, CUSTOM, ECS, HELM, KUBERNETES, PCF, SSH, WINRM
     */
    deploymentType: pulumi.Input<string>;
    /**
     * The id of the environment the infrastructure definition belongs to.
     */
    envId: pulumi.Input<string>;
    /**
     * The configuration details for Kubernetes deployments.
     */
    kubernetes?: pulumi.Input<inputs.InfrastructureDefinitionKubernetes>;
    /**
     * The configuration details for Kubernetes on GCP deployments.
     */
    kubernetesGcp?: pulumi.Input<inputs.InfrastructureDefinitionKubernetesGcp>;
    /**
     * The name of the infrastructure definition
     */
    name?: pulumi.Input<string>;
    /**
     * The name of the infrastructure provisioner to use.
     */
    provisionerName?: pulumi.Input<string>;
    /**
     * The list of service names to scope this infrastructure definition to.
     */
    scopedServices?: pulumi.Input<pulumi.Input<string>[]>;
    /**
     * The configuration details for PCF deployments.
     */
    tanzu?: pulumi.Input<inputs.InfrastructureDefinitionTanzu>;
}
