/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface ServerConfig extends cdktf.TerraformMetaArguments {
    /**
    * The boot device order, `cdrom`|`disk`|`network` or comma separated combination of those values. Defaults to `disk`
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#boot_order Server#boot_order}
    */
    readonly bootOrder?: string;
    /**
    * The number of CPU cores for the server
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#cpu Server#cpu}
    */
    readonly cpu?: number;
    /**
    * Are firewall rules active for the server
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#firewall Server#firewall}
    */
    readonly firewall?: boolean | cdktf.IResolvable;
    /**
    * Use this to start the VM on a specific host. Refers to value from host -attribute. Only available for private cloud hosts
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#host Server#host}
    */
    readonly host?: number;
    /**
    * The hostname of the server.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#hostname Server#hostname}
    */
    readonly hostname: string;
    /**
    * User defined key-value pairs to classify the server.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#labels Server#labels}
    */
    readonly labels?: {
        [key: string]: string;
    };
    /**
    * The amount of memory for the server (in megabytes)
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#mem Server#mem}
    */
    readonly mem?: number;
    /**
    * Is metadata service active for the server
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#metadata Server#metadata}
    */
    readonly metadata?: boolean | cdktf.IResolvable;
    /**
    * The model of the server's network interfaces
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#nic_model Server#nic_model}
    */
    readonly nicModel?: string;
    /**
    * The pricing plan used for the server. You can list available server plans with `upctl server plans`
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#plan Server#plan}
    */
    readonly plan?: string;
    /**
    * The UUID of a server group to attach this server to. Note that the server can also be attached to a server group via the `members` property of `upcloud_server_group`. Only one of the these should be defined at a time. This value is only updated if it has been set to non-zero value.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#server_group Server#server_group}
    */
    readonly serverGroup?: string;
    /**
    * The server related tags
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#tags Server#tags}
    */
    readonly tags?: string[];
    /**
    * The timezone of the server. The timezone must be a valid timezone string, e.g. `Europe/Helsinki`.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#timezone Server#timezone}
    */
    readonly timezone?: string;
    /**
    * A short, informational description of the server.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#title Server#title}
    */
    readonly title?: string;
    /**
    * Defines URL for a server setup script, or the script body itself
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#user_data Server#user_data}
    */
    readonly userData?: string;
    /**
    * The model of the server's video interface
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#video_model Server#video_model}
    */
    readonly videoModel?: string;
    /**
    * The zone in which the server will be hosted, e.g. `de-fra1`. You can list available zones with `upctl zone list`.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#zone Server#zone}
    */
    readonly zone: string;
    /**
    * login block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#login Server#login}
    */
    readonly login?: ServerLogin[] | cdktf.IResolvable;
    /**
    * network_interface block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#network_interface Server#network_interface}
    */
    readonly networkInterface?: ServerNetworkInterface[] | cdktf.IResolvable;
    /**
    * simple_backup block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#simple_backup Server#simple_backup}
    */
    readonly simpleBackup?: ServerSimpleBackup[] | cdktf.IResolvable;
    /**
    * storage_devices block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#storage_devices Server#storage_devices}
    */
    readonly storageDevices?: ServerStorageDevices[] | cdktf.IResolvable;
    /**
    * template block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#template Server#template}
    */
    readonly template?: ServerTemplate[] | cdktf.IResolvable;
}
export interface ServerLogin {
    /**
    * Indicates a password should be create to allow access
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#create_password Server#create_password}
    */
    readonly createPassword?: boolean | cdktf.IResolvable;
    /**
    * A list of ssh keys to access the server
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#keys Server#keys}
    */
    readonly keys?: string[];
    /**
    * The delivery method for the server's root password (one of `none`, `email` or `sms`)
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#password_delivery Server#password_delivery}
    */
    readonly passwordDelivery?: string;
    /**
    * Username to be create to access the server
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#user Server#user}
    */
    readonly user?: string;
}
export declare function serverLoginToTerraform(struct?: ServerLogin | cdktf.IResolvable): any;
export declare function serverLoginToHclTerraform(struct?: ServerLogin | cdktf.IResolvable): any;
export declare class ServerLoginOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerLogin | cdktf.IResolvable | undefined;
    set internalValue(value: ServerLogin | cdktf.IResolvable | undefined);
    private _createPassword?;
    get createPassword(): boolean | cdktf.IResolvable;
    set createPassword(value: boolean | cdktf.IResolvable);
    resetCreatePassword(): void;
    get createPasswordInput(): boolean | cdktf.IResolvable | undefined;
    private _keys?;
    get keys(): string[];
    set keys(value: string[]);
    resetKeys(): void;
    get keysInput(): string[] | undefined;
    private _passwordDelivery?;
    get passwordDelivery(): string;
    set passwordDelivery(value: string);
    resetPasswordDelivery(): void;
    get passwordDeliveryInput(): string | undefined;
    private _user?;
    get user(): string;
    set user(value: string);
    resetUser(): void;
    get userInput(): string | undefined;
}
export declare class ServerLoginList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerLogin[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerLoginOutputReference;
}
export interface ServerNetworkInterfaceAdditionalIpAddress {
    /**
    * An additional IP address for this interface.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#ip_address Server#ip_address}
    */
    readonly ipAddress?: string;
    /**
    * The type of the additional IP address of this interface (one of `IPv4` or `IPv6`).
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#ip_address_family Server#ip_address_family}
    */
    readonly ipAddressFamily?: string;
}
export declare function serverNetworkInterfaceAdditionalIpAddressToTerraform(struct?: ServerNetworkInterfaceAdditionalIpAddress | cdktf.IResolvable): any;
export declare function serverNetworkInterfaceAdditionalIpAddressToHclTerraform(struct?: ServerNetworkInterfaceAdditionalIpAddress | cdktf.IResolvable): any;
export declare class ServerNetworkInterfaceAdditionalIpAddressOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerNetworkInterfaceAdditionalIpAddress | cdktf.IResolvable | undefined;
    set internalValue(value: ServerNetworkInterfaceAdditionalIpAddress | cdktf.IResolvable | undefined);
    private _ipAddress?;
    get ipAddress(): string;
    set ipAddress(value: string);
    resetIpAddress(): void;
    get ipAddressInput(): string | undefined;
    private _ipAddressFamily?;
    get ipAddressFamily(): string;
    set ipAddressFamily(value: string);
    resetIpAddressFamily(): void;
    get ipAddressFamilyInput(): string | undefined;
    get ipAddressFloating(): cdktf.IResolvable;
}
export declare class ServerNetworkInterfaceAdditionalIpAddressList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerNetworkInterfaceAdditionalIpAddress[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerNetworkInterfaceAdditionalIpAddressOutputReference;
}
export interface ServerNetworkInterface {
    /**
    * `true` if this interface should be used for network booting.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#bootable Server#bootable}
    */
    readonly bootable?: boolean | cdktf.IResolvable;
    /**
    * The interface index.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#index Server#index}
    */
    readonly index?: number;
    /**
    * The primary IP address of this interface.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#ip_address Server#ip_address}
    */
    readonly ipAddress?: string;
    /**
    * The type of the primary IP address of this interface (one of `IPv4` or `IPv6`).
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#ip_address_family Server#ip_address_family}
    */
    readonly ipAddressFamily?: string;
    /**
    * The UUID of the network to attach this interface to. Required for private network interfaces.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#network Server#network}
    */
    readonly network?: string;
    /**
    * `true` if source IP should be filtered.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#source_ip_filtering Server#source_ip_filtering}
    */
    readonly sourceIpFiltering?: boolean | cdktf.IResolvable;
    /**
    * Network interface type. For private network interfaces, a network must be specified with an existing network id.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#type Server#type}
    */
    readonly type: string;
    /**
    * additional_ip_address block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#additional_ip_address Server#additional_ip_address}
    */
    readonly additionalIpAddress?: ServerNetworkInterfaceAdditionalIpAddress[] | cdktf.IResolvable;
}
export declare function serverNetworkInterfaceToTerraform(struct?: ServerNetworkInterface | cdktf.IResolvable): any;
export declare function serverNetworkInterfaceToHclTerraform(struct?: ServerNetworkInterface | cdktf.IResolvable): any;
export declare class ServerNetworkInterfaceOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerNetworkInterface | cdktf.IResolvable | undefined;
    set internalValue(value: ServerNetworkInterface | cdktf.IResolvable | undefined);
    private _bootable?;
    get bootable(): boolean | cdktf.IResolvable;
    set bootable(value: boolean | cdktf.IResolvable);
    resetBootable(): void;
    get bootableInput(): boolean | cdktf.IResolvable | undefined;
    private _index?;
    get index(): number;
    set index(value: number);
    resetIndex(): void;
    get indexInput(): number | undefined;
    private _ipAddress?;
    get ipAddress(): string;
    set ipAddress(value: string);
    resetIpAddress(): void;
    get ipAddressInput(): string | undefined;
    private _ipAddressFamily?;
    get ipAddressFamily(): string;
    set ipAddressFamily(value: string);
    resetIpAddressFamily(): void;
    get ipAddressFamilyInput(): string | undefined;
    get ipAddressFloating(): cdktf.IResolvable;
    get macAddress(): string;
    private _network?;
    get network(): string;
    set network(value: string);
    resetNetwork(): void;
    get networkInput(): string | undefined;
    private _sourceIpFiltering?;
    get sourceIpFiltering(): boolean | cdktf.IResolvable;
    set sourceIpFiltering(value: boolean | cdktf.IResolvable);
    resetSourceIpFiltering(): void;
    get sourceIpFilteringInput(): boolean | cdktf.IResolvable | undefined;
    private _type?;
    get type(): string;
    set type(value: string);
    get typeInput(): string | undefined;
    private _additionalIpAddress;
    get additionalIpAddress(): ServerNetworkInterfaceAdditionalIpAddressList;
    putAdditionalIpAddress(value: ServerNetworkInterfaceAdditionalIpAddress[] | cdktf.IResolvable): void;
    resetAdditionalIpAddress(): void;
    get additionalIpAddressInput(): cdktf.IResolvable | ServerNetworkInterfaceAdditionalIpAddress[] | undefined;
}
export declare class ServerNetworkInterfaceList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerNetworkInterface[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerNetworkInterfaceOutputReference;
}
export interface ServerSimpleBackup {
    /**
    * Simple backup plan. Accepted values: daily, dailies, weeklies, monthlies.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#plan Server#plan}
    */
    readonly plan?: string;
    /**
    * Time of the day at which backup will be taken. Should be provided in a hhmm format (e.g. 2230).
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#time Server#time}
    */
    readonly time?: string;
}
export declare function serverSimpleBackupToTerraform(struct?: ServerSimpleBackup | cdktf.IResolvable): any;
export declare function serverSimpleBackupToHclTerraform(struct?: ServerSimpleBackup | cdktf.IResolvable): any;
export declare class ServerSimpleBackupOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerSimpleBackup | cdktf.IResolvable | undefined;
    set internalValue(value: ServerSimpleBackup | cdktf.IResolvable | undefined);
    private _plan?;
    get plan(): string;
    set plan(value: string);
    resetPlan(): void;
    get planInput(): string | undefined;
    private _time?;
    get time(): string;
    set time(value: string);
    resetTime(): void;
    get timeInput(): string | undefined;
}
export declare class ServerSimpleBackupList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerSimpleBackup[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerSimpleBackupOutputReference;
}
export interface ServerStorageDevices {
    /**
    * The device address the storage will be attached to (`scsi`|`virtio`|`ide`). Leave `address_position` field empty to auto-select next available address from that bus.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#address Server#address}
    */
    readonly address?: string;
    /**
    * The device position in the given bus (defined via field `address`). Valid values for address `virtio` are `0-15` (`0`, for example). Valid values for `scsi` or `ide` are `0-1:0-1` (`0:0`, for example). Leave empty to auto-select next available address in the given bus.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#address_position Server#address_position}
    */
    readonly addressPosition?: string;
    /**
    * The UUID of the storage to attach to the server.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#storage Server#storage}
    */
    readonly storage?: string;
    /**
    * The device type the storage will be attached as
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#type Server#type}
    */
    readonly type?: string;
}
export declare function serverStorageDevicesToTerraform(struct?: ServerStorageDevices | cdktf.IResolvable): any;
export declare function serverStorageDevicesToHclTerraform(struct?: ServerStorageDevices | cdktf.IResolvable): any;
export declare class ServerStorageDevicesOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerStorageDevices | cdktf.IResolvable | undefined;
    set internalValue(value: ServerStorageDevices | cdktf.IResolvable | undefined);
    private _address?;
    get address(): string;
    set address(value: string);
    resetAddress(): void;
    get addressInput(): string | undefined;
    private _addressPosition?;
    get addressPosition(): string;
    set addressPosition(value: string);
    resetAddressPosition(): void;
    get addressPositionInput(): string | undefined;
    private _storage?;
    get storage(): string;
    set storage(value: string);
    resetStorage(): void;
    get storageInput(): string | undefined;
    private _type?;
    get type(): string;
    set type(value: string);
    resetType(): void;
    get typeInput(): string | undefined;
}
export declare class ServerStorageDevicesList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerStorageDevices[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerStorageDevicesOutputReference;
}
export interface ServerTemplateBackupRule {
    /**
    * The weekday when the backup is created
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#interval Server#interval}
    */
    readonly interval: string;
    /**
    * The number of days before a backup is automatically deleted
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#retention Server#retention}
    */
    readonly retention: number;
    /**
    * The time of day when the backup is created
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#time Server#time}
    */
    readonly time: string;
}
export declare function serverTemplateBackupRuleToTerraform(struct?: ServerTemplateBackupRule | cdktf.IResolvable): any;
export declare function serverTemplateBackupRuleToHclTerraform(struct?: ServerTemplateBackupRule | cdktf.IResolvable): any;
export declare class ServerTemplateBackupRuleOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerTemplateBackupRule | cdktf.IResolvable | undefined;
    set internalValue(value: ServerTemplateBackupRule | cdktf.IResolvable | undefined);
    private _interval?;
    get interval(): string;
    set interval(value: string);
    get intervalInput(): string | undefined;
    private _retention?;
    get retention(): number;
    set retention(value: number);
    get retentionInput(): number | undefined;
    private _time?;
    get time(): string;
    set time(value: string);
    get timeInput(): string | undefined;
}
export declare class ServerTemplateBackupRuleList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerTemplateBackupRule[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerTemplateBackupRuleOutputReference;
}
export interface ServerTemplate {
    /**
    * The device address the storage will be attached to (`scsi`|`virtio`|`ide`). Leave `address_position` field empty to auto-select next available address from that bus.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#address Server#address}
    */
    readonly address?: string;
    /**
    * The device position in the given bus (defined via field `address`). For example `0:0`, or `0`. Leave empty to auto-select next available address in the given bus.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#address_position Server#address_position}
    */
    readonly addressPosition?: string;
    /**
    * If set to true, the backup taken before the partition and filesystem resize attempt will be deleted immediately after success.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#delete_autoresize_backup Server#delete_autoresize_backup}
    */
    readonly deleteAutoresizeBackup?: boolean | cdktf.IResolvable;
    /**
    * Sets if the storage is encrypted at rest
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#encrypt Server#encrypt}
    */
    readonly encrypt?: boolean | cdktf.IResolvable;
    /**
    * If set to true, provider will attempt to resize partition and filesystem when the size of template storage changes.
    * 							Please note that before the resize attempt is made, backup of the storage will be taken. If the resize attempt fails, the backup will be used
    * 							to restore the storage and then deleted. If the resize attempt succeeds, backup will be kept (unless delete_autoresize_backup option is set to true).
    * 							Taking and keeping backups incure costs.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#filesystem_autoresize Server#filesystem_autoresize}
    */
    readonly filesystemAutoresize?: boolean | cdktf.IResolvable;
    /**
    * The size of the storage in gigabytes
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#size Server#size}
    */
    readonly size?: number;
    /**
    * A valid storage UUID or template name. You can list available public templates with `upctl storage list --public --template` and available private templates with `upctl storage list --template`.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#storage Server#storage}
    */
    readonly storage?: string;
    /**
    * The storage tier to use.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#tier Server#tier}
    */
    readonly tier?: string;
    /**
    * A short, informative description
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#title Server#title}
    */
    readonly title?: string;
    /**
    * backup_rule block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#backup_rule Server#backup_rule}
    */
    readonly backupRule?: ServerTemplateBackupRule[] | cdktf.IResolvable;
}
export declare function serverTemplateToTerraform(struct?: ServerTemplate | cdktf.IResolvable): any;
export declare function serverTemplateToHclTerraform(struct?: ServerTemplate | cdktf.IResolvable): any;
export declare class ServerTemplateOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): ServerTemplate | cdktf.IResolvable | undefined;
    set internalValue(value: ServerTemplate | cdktf.IResolvable | undefined);
    private _address?;
    get address(): string;
    set address(value: string);
    resetAddress(): void;
    get addressInput(): string | undefined;
    private _addressPosition?;
    get addressPosition(): string;
    set addressPosition(value: string);
    resetAddressPosition(): void;
    get addressPositionInput(): string | undefined;
    private _deleteAutoresizeBackup?;
    get deleteAutoresizeBackup(): boolean | cdktf.IResolvable;
    set deleteAutoresizeBackup(value: boolean | cdktf.IResolvable);
    resetDeleteAutoresizeBackup(): void;
    get deleteAutoresizeBackupInput(): boolean | cdktf.IResolvable | undefined;
    private _encrypt?;
    get encrypt(): boolean | cdktf.IResolvable;
    set encrypt(value: boolean | cdktf.IResolvable);
    resetEncrypt(): void;
    get encryptInput(): boolean | cdktf.IResolvable | undefined;
    private _filesystemAutoresize?;
    get filesystemAutoresize(): boolean | cdktf.IResolvable;
    set filesystemAutoresize(value: boolean | cdktf.IResolvable);
    resetFilesystemAutoresize(): void;
    get filesystemAutoresizeInput(): boolean | cdktf.IResolvable | undefined;
    get id(): string;
    private _size?;
    get size(): number;
    set size(value: number);
    resetSize(): void;
    get sizeInput(): number | undefined;
    private _storage?;
    get storage(): string;
    set storage(value: string);
    resetStorage(): void;
    get storageInput(): string | undefined;
    private _tier?;
    get tier(): string;
    set tier(value: string);
    resetTier(): void;
    get tierInput(): string | undefined;
    private _title?;
    get title(): string;
    set title(value: string);
    resetTitle(): void;
    get titleInput(): string | undefined;
    private _backupRule;
    get backupRule(): ServerTemplateBackupRuleList;
    putBackupRule(value: ServerTemplateBackupRule[] | cdktf.IResolvable): void;
    resetBackupRule(): void;
    get backupRuleInput(): cdktf.IResolvable | ServerTemplateBackupRule[] | undefined;
}
export declare class ServerTemplateList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ServerTemplate[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): ServerTemplateOutputReference;
}
/**
* Represents a {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server upcloud_server}
*/
export declare class Server extends cdktf.TerraformResource {
    static readonly tfResourceType = "upcloud_server";
    /**
    * Generates CDKTF code for importing a Server resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the Server to import
    * @param importFromId The id of the existing Server that should be imported. Refer to the {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the Server to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/server upcloud_server} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options ServerConfig
    */
    constructor(scope: Construct, id: string, config: ServerConfig);
    private _bootOrder?;
    get bootOrder(): string;
    set bootOrder(value: string);
    resetBootOrder(): void;
    get bootOrderInput(): string | undefined;
    private _cpu?;
    get cpu(): number;
    set cpu(value: number);
    resetCpu(): void;
    get cpuInput(): number | undefined;
    private _firewall?;
    get firewall(): boolean | cdktf.IResolvable;
    set firewall(value: boolean | cdktf.IResolvable);
    resetFirewall(): void;
    get firewallInput(): boolean | cdktf.IResolvable | undefined;
    private _host?;
    get host(): number;
    set host(value: number);
    resetHost(): void;
    get hostInput(): number | undefined;
    private _hostname?;
    get hostname(): string;
    set hostname(value: string);
    get hostnameInput(): string | undefined;
    get id(): string;
    private _labels?;
    get labels(): {
        [key: string]: string;
    };
    set labels(value: {
        [key: string]: string;
    });
    resetLabels(): void;
    get labelsInput(): {
        [key: string]: string;
    } | undefined;
    private _mem?;
    get mem(): number;
    set mem(value: number);
    resetMem(): void;
    get memInput(): number | undefined;
    private _metadata?;
    get metadata(): boolean | cdktf.IResolvable;
    set metadata(value: boolean | cdktf.IResolvable);
    resetMetadata(): void;
    get metadataInput(): boolean | cdktf.IResolvable | undefined;
    private _nicModel?;
    get nicModel(): string;
    set nicModel(value: string);
    resetNicModel(): void;
    get nicModelInput(): string | undefined;
    private _plan?;
    get plan(): string;
    set plan(value: string);
    resetPlan(): void;
    get planInput(): string | undefined;
    private _serverGroup?;
    get serverGroup(): string;
    set serverGroup(value: string);
    resetServerGroup(): void;
    get serverGroupInput(): string | undefined;
    private _tags?;
    get tags(): string[];
    set tags(value: string[]);
    resetTags(): void;
    get tagsInput(): string[] | undefined;
    private _timezone?;
    get timezone(): string;
    set timezone(value: string);
    resetTimezone(): void;
    get timezoneInput(): string | undefined;
    private _title?;
    get title(): string;
    set title(value: string);
    resetTitle(): void;
    get titleInput(): string | undefined;
    private _userData?;
    get userData(): string;
    set userData(value: string);
    resetUserData(): void;
    get userDataInput(): string | undefined;
    private _videoModel?;
    get videoModel(): string;
    set videoModel(value: string);
    resetVideoModel(): void;
    get videoModelInput(): string | undefined;
    private _zone?;
    get zone(): string;
    set zone(value: string);
    get zoneInput(): string | undefined;
    private _login;
    get login(): ServerLoginList;
    putLogin(value: ServerLogin[] | cdktf.IResolvable): void;
    resetLogin(): void;
    get loginInput(): cdktf.IResolvable | ServerLogin[] | undefined;
    private _networkInterface;
    get networkInterface(): ServerNetworkInterfaceList;
    putNetworkInterface(value: ServerNetworkInterface[] | cdktf.IResolvable): void;
    resetNetworkInterface(): void;
    get networkInterfaceInput(): cdktf.IResolvable | ServerNetworkInterface[] | undefined;
    private _simpleBackup;
    get simpleBackup(): ServerSimpleBackupList;
    putSimpleBackup(value: ServerSimpleBackup[] | cdktf.IResolvable): void;
    resetSimpleBackup(): void;
    get simpleBackupInput(): cdktf.IResolvable | ServerSimpleBackup[] | undefined;
    private _storageDevices;
    get storageDevices(): ServerStorageDevicesList;
    putStorageDevices(value: ServerStorageDevices[] | cdktf.IResolvable): void;
    resetStorageDevices(): void;
    get storageDevicesInput(): cdktf.IResolvable | ServerStorageDevices[] | undefined;
    private _template;
    get template(): ServerTemplateList;
    putTemplate(value: ServerTemplate[] | cdktf.IResolvable): void;
    resetTemplate(): void;
    get templateInput(): cdktf.IResolvable | ServerTemplate[] | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
