openstack_compute_instance_v2
Эта инструкция — адаптированная копия официальной документации OpenStack Terraform-провайдера в Terraform Registry.
Manages a V2 VM instance resource within OpenStack.
All arguments including the instance admin password will be stored in the raw state as plain-text. Read more about sensitive data in state.
Example Usage
Basic Instance
resource "openstack_compute_instance_v2" "basic" {
name = "basic"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
metadata = {
this = "that"
}
network {
name = "<network-name>"
}
}
Instance With Attached Volume
resource "openstack_blockstorage_volume_v3" "myvol" {
name = "myvol"
size = 5
}
resource "openstack_compute_instance_v2" "myinstance" {
name = "myinstance"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
network {
name = "<network-name>"
}
}
resource "openstack_compute_volume_attach_v2" "attached" {
instance_id = openstack_compute_instance_v2.myinstance.id
volume_id = openstack_blockstorage_volume_v3.myvol.id
}
Boot From Volume
resource "openstack_compute_instance_v2" "boot-from-volume" {
name = "boot-from-volume"
flavor_id = "1011"
key_pair = "<key-pair-name>"
block_device {
uuid = "<image-id>"
source_type = "image"
volume_size = 5
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
network {
name = "<network-name>"
}
}
Boot From an Existing Volume
resource "openstack_blockstorage_volume_v3" "myvol" {
name = "myvol"
size = 5
image_id = "<image-id>"
}
resource "openstack_compute_instance_v2" "boot-from-volume" {
name = "bootfromvolume"
flavor_id = "1011"
key_pair = "<key-pair-name>"
block_device {
uuid = openstack_blockstorage_volume_v3.myvol.id
source_type = "volume"
boot_index = 0
destination_type = "volume"
delete_on_termination = true
}
network {
name = "<network-name>"
}
}
Boot Instance, Create Volume, and Attach Volume as a Block Device
resource "openstack_compute_instance_v2" "instance_1" {
name = "instance_1"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
block_device {
uuid = "<image-id>"
source_type = "image"
destination_type = "local"
boot_index = 0
delete_on_termination = true
}
block_device {
source_type = "blank"
destination_type = "volume"
volume_size = 5
boot_index = 1
delete_on_termination = true
}
}
Boot Instance and Attach Existing Volume as a Block Device
resource "openstack_blockstorage_volume_v3" "volume_1" {
name = "volume_1"
size = 1
}
resource "openstack_compute_instance_v2" "instance_1" {
name = "instance_1"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
block_device {
uuid = "<image-id>"
source_type = "image"
destination_type = "local"
boot_index = 0
delete_on_termination = true
}
block_device {
uuid = openstack_blockstorage_volume_v3.volume_1.id
source_type = "volume"
destination_type = "volume"
boot_index = 1
delete_on_termination = true
}
}
Instance With Multiple Networks
resource "openstack_networking_floatingip_v2" "myip" {
pool = "my_pool"
}
resource "openstack_compute_instance_v2" "multi-net" {
name = "multi-net"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
network {
name = "<network1-name>"
}
network {
name = "<network2-name>"
}
}
resource "openstack_compute_floatingip_associate_v2" "myip" {
floating_ip = openstack_networking_floatingip_v2.myip.address
instance_id = openstack_compute_instance_v2.multi-net.id
fixed_ip = openstack_compute_instance_v2.multi-net.network.1.fixed_ip_v4
}
Instance With Personality
resource "openstack_compute_instance_v2" "personality" {
name = "personality"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
personality {
file = "/path/to/file/on/instance.txt"
content = "contents of file"
}
network {
name = "<network-name>"
}
}
Instance with Multiple Ephemeral Disks
Applicable only to Private Clouds
resource "openstack_compute_instance_v2" "multi-eph" {
name = "multi_eph"
image_id = <image-id>
flavor_id = "1311"
key_pair = "<key-pair-name>"
block_device {
boot_index = 0
delete_on_termination = true
destination_type = "local"
source_type = "image"
uuid = "<image-id>"
}
block_device {
boot_index = -1
delete_on_termination = true
destination_type = "local"
source_type = "blank"
volume_size = 1
guest_format = "ext4"
}
block_device {
boot_index = -1
delete_on_termination = true
destination_type = "local"
source_type = "blank"
volume_size = 1
}
}
Instance with Boot Disk and Swap Disk
Applicable only to Private Clouds
resource "openstack_compute_flavor_v2" "flavor-with-swap" {
name = "flavor-with-swap"
ram = "8096"
vcpus = "2"
disk = "20"
swap = "4096"
}
resource "openstack_compute_instance_v2" "vm-swap" {
name = "vm_swap"
flavor_id = openstack_compute_flavor_v2.flavor-with-swap.id
key_pair = "<key-pair-name>"
block_device {
boot_index = 0
delete_on_termination = true
destination_type = "local"
source_type = "image"
uuid = "<image-id>"
}
block_device {
boot_index = -1
delete_on_termination = true
destination_type = "local"
source_type = "blank"
guest_format = "swap"
volume_size = 4
}
}
Instance with User Data (cloud-init)
resource "openstack_compute_instance_v2" "instance_1" {
name = "basic"
image_id = "<image-id>"
flavor_id = "1311"
key_pair = "<key-pair-name>"
user_data = "#cloud-config\nhostname: instance_1.example.com\nfqdn: instance_1.example.com"
network {
name = "<network-name>"
}
}
user_data
can come from a variety of sources: inline, read in from the file
function, or the template_cloudinit_config
resource.
Argument Reference
The following arguments are supported:
-
region
— (Optional) The region in which to create the server instance. If omitted, theregion
argument of the provider is used. Changing this creates a new server. -
name
— (Required) A unique name for the resource. -
image_id
— (Optional; Required ifimage_name
is empty and not booting from a volume. Do not specify if booting from a volume.) The image ID of the desired image for the server. Changing this rebuilds the existing server. -
image_name
— (Optional; Required ifimage_id
is empty and not booting from a volume. Do not specify if booting from a volume.) The name of the desired image for the server. Changing this rebuilds the existing server. -
flavor_id
— (Optional; Required ifflavor_name
is empty) The flavor ID of the desired flavor for the server. Changing this resizes the existing server. -
flavor_name
— (Optional; Required ifflavor_id
is empty) The name of the desired flavor for the server. Changing this resizes the existing server. -
user_data
— (Optional) The user data to provide when launching the instance. Changing this creates a new server. -
availability_zone_hints
— (Optional) The availability zone in which to create the server. This argument is preferred toavailability_zone
, when scheduling the server on a particular host or node. Conflicts withavailability_zone
. Changing this creates a new server. -
availability_zone
— (Optional) The availability zone in which to create the server. Conflicts withavailability_zone_hints
. Changing this creates a new server. -
network
— (Optional) An array of one or more networks to attach to the instance. The network object structure is documented below. Changing this creates a new server. -
network_mode
— (Optional) Special string fornetwork
option to create the server.network_mode
can be"auto"
or"none"
. Please see the following reference for more information. Conflicts withnetwork
. -
metadata
— (Optional) Metadata key/value pairs to make available from within the instance. Changing this updates the existing server metadata. -
config_drive
— (Optional) Whether to use the config_drive feature to configure the instance. Changing this creates a new server. -
admin_pass
— (Optional) The administrative password to assign to the server. Changing this changes the root password on the existing server. -
key_pair
— (Optional) The name of a key pair to put on the server. The key pair must already be created and associated with the tenant's account. Changing this creates a new server. -
block_device
— (Optional) Configuration of block devices. The block_device structure is documented below. Changing this creates a new server. You can specify multiple block devices which will create an instance with multiple disks. This configuration is very flexible, so please see the following reference for more information. -
scheduler_hints
— (Optional) Provide the Nova scheduler with hints on how the instance should be launched. The available hints are described below.
When you import an instance belonging to a server group, the scheduler_hints
block in a state file remains empty and Terraform will require to recreate an instance in the server group. For more information about the ways to avoid the problem, see the Importing an instance belonging to a server group.
-
personality
— (Optional) Customize the personality of an instance by defining one or more files and their contents. The personality structure is described below. Changing this rebuilds the existing server. -
stop_before_destroy
— (Optional) Whether to try stop instance gracefully before destroying it, thus giving chance for guest OS daemons to stop correctly. If instance doesn't stop within timeout, it will be destroyed anyway. -
force_delete
— (Optional) Whether to force the OpenStack instance to be forcefully deleted. This is useful for environments that have reclaim / soft deletion enabled. -
power_state
— (Optional) Provide the VM state. Only 'active', 'shutoff' and 'shelved_offloaded' are supported values. Note: If the initial power_state is the shutoff the VM will be stopped immediately after build and the provisioners like remote-exec or files are not supported. -
tags
— (Optional) A set of string tags for the instance. Changing this updates the existing instance tags. -
vendor_options
— (Optional) Map of additional vendor-specific options. Supported options are described below.
The network
block supports:
-
uuid
— (Required unlessport
orname
is provided) The network UUID to attach to the server. Changing this creates a new server. -
name
— (Required unlessuuid
orport
is provided) The human-readable name of the network. Changing this creates a new server. -
port
— (Required unlessuuid
orname
is provided) The port UUID of a network to attach to the server. Changing this creates a new server. -
fixed_ip_v4
— (Optional) Specifies a fixed IPv4 address to be used on this network. Changing this creates a new server. -
access_network
— (Optional) Specifies if this network should be used for provisioning access. Accepts true or false. Defaults to false.
The block_device
block supports:
-
uuid
— (Required unlesssource_type
is set to"blank"
) The UUID of the image, volume, or snapshot. Changing this creates a new server. -
source_type
— (Required) The source type of the device. Must be one of "blank", "image", "volume", or "snapshot". Changing this creates a new server. -
volume_size
— The size of the volume to create (in gigabytes). Required in the following combinations: source=image and destination=volume, source=blank and destination=local, and source=blank and destination=volume. Changing this creates a new server. -
guest_format
— (Optional) Specifies the guest server disk file system format, such asext2
,ext3
,ext4
,xfs
orswap
. Swap block device mappings have the following restrictions: source_type must be blank and destination_type must be local and only one swap disk per server and the size of the swap disk must be less than or equal to the swap size of the flavor. Changing this creates a new server. -
boot_index
— (Optional) The boot index of the volume. It defaults to 0. Changing this creates a new server. -
destination_type
— (Optional) The type that gets created. Possible values are "volume" and "local". Changing this creates a new server. -
delete_on_termination
— (Optional) Delete the volume / block device upon termination of the instance. Defaults to false. Changing this creates a new server. -
volume_type
— (Optional) The volume type that will be used, for example SSD or HDD storage. The available options depend on how your specific OpenStack cloud is configured and what classes of storage are provided. Changing this creates a new server. -
device_type
— (Optional) The low-level device type that will be used. Most common thing is to leave this empty. Changing this creates a new server. -
disk_bus
— (Optional) The low-level disk bus that will be used. Most common thing is to leave this empty. Changing this creates a new server. -
multiattach
— (Optional) Enable the attachment of multiattach-capable volumes. Applicable only to Private Clouds.
The scheduler_hints
block supports:
-
group
— (Optional) A UUID of a Server Group. The instance will be placed into that group. -
different_host
— (Optional) A list of instance UUIDs. The instance will be scheduled on a different host than all other instances. -
same_host
— (Optional) A list of instance UUIDs. The instance will be scheduled on the same host of those specified. -
query
— (Optional) A conditional query that a compute node must pass in order to host an instance. The query must use theJsonFilter
syntax which is described here. At this time, only simple queries are supported. Compound queries usingand
,or
, ornot
are not supported. Applicable only to Private Clouds. An example of a simple query is:[">=", "$free_ram_mb", "1024"]
-
target_cell
— (Optional) The name of a cell to host the instance. Applicable only to Private Clouds. -
different_cell
— (Optional) The names of cells where not to build the instance. Applicable only to Private Clouds. -
build_near_host_ip
— (Optional) An IP Address in CIDR form. The instance will be placed on a compute node that is in the same subnet. Applicable only to Private Clouds. -
additional_properties
— (Optional) Arbitrary key/value pairs of additional properties to pass to the scheduler.
The personality
block supports:
-
file
— (Required) The absolute path of the destination file. -
content
— (Required) The contents of the file. Limited to 255 bytes.
The vendor_options
block supports:
-
ignore_resize_confirmation
— (Optional) Boolean to control whether to ignore manual confirmation of the instance resizing. This can be helpful to work with some OpenStack clouds which automatically confirm resizing of instances after some timeout. -
detach_ports_before_destroy
— (Optional) Whether to try to detach all attached ports to the vm before destroying it to make sure the port state is correct after the vm destruction. This is helpful when the port is not deleted.
Attributes Reference
The following attributes are exported:
region
— See Argument Reference above.name
— See Argument Reference above.access_ip_v4
— The first detected Fixed IPv4 address.access_ip_v6
— The first detected Fixed IPv6 address.metadata
— See Argument Reference above.flavor_id
— See Argument Reference above.flavor_name
— See Argument Reference above.network/uuid
— See Argument Reference above.network/name
— See Argument Reference above.network/port
— See Argument Reference above.network/fixed_ip_v4
— The Fixed IPv4 address of the Instance on that network.network/fixed_ip_v6
— The Fixed IPv6 address of the Instance on that network.network/mac
— The MAC address of the NIC on that network.all_metadata
— Contains all instance metadata, even metadata not set by Terraform.tags
— See Argument Reference above.all_tags
— The collection of tags assigned on the instance, which have been explicitly and implicitly added.created
— The creation time of the instance.updated
— The time when the instance was last updated.