» opc_compute_instance
The opc_compute_instance
resource creates and manages an instance in an Oracle Cloud Infrastructure Compute Classic identity domain.
Caution: The opc_compute_instance
resource can completely delete your
instance just as easily as it can create it. To avoid costly accidents,
consider setting
prevent_destroy
on your instance resources as an extra safety measure.
» Example Usage
resource "opc_compute_ip_network" "test" {
name = "internal-network"
description = "Terraform Provisioned Internal Network"
ip_address_prefix = "10.0.1.0/24"
public_napt_enabled = false
}
resource "opc_compute_storage_volume" "test" {
name = "internal"
size = 100
}
resource "opc_compute_instance" "test" {
name = "instance1"
label = "Terraform Provisioned Instance"
shape = "oc3"
image_list = "/oracle/public/oel_6.7_apaas_16.4.5_1610211300"
storage {
volume = "${opc_compute_storage_volume.test.name}"
index = 1
}
networking_info {
index = 0
nat = ["ippool:/oracle/public/ippool"]
shared_network = true
}
}
» Argument Reference
The following arguments are supported:
-
name
- (Required) The name of the instance. -
shape
- (Required) The shape of the instance, e.g.oc4
. -
instance_attributes
- (Optional) A JSON string of custom attributes. See Attributes below for more information. -
boot_order
- (Optional) The index number of the bootable storage volume, presented as a list, that should be used to boot the instance. The only valid value is[1]
. If you set this attribute, you must also specify a bootable storage volume with index number 1 in the volume sub-parameter of storage_attachments. When you specify boot_order, you don't need to specify the imagelist attribute, because the instance is booted using the image on the specified bootable storage volume. If you specify both boot_order and imagelist, the imagelist attribute is ignored. -
hostname
- (Optional) The host name assigned to the instance. On an Oracle Linux instance, this host name is displayed in response to the hostname command. Only relative DNS is supported. The domain name is suffixed to the host name that you specify. The host name must not end with a period. If you don't specify a host name, then a name is generated automatically. -
image_list
- (Optional) The imageList of the instance, e.g./oracle/public/oel_6.4_2GB_v1
. -
label
- (Optional) The label to apply to the instance. -
desired_state
- (Optional) Set the desire state of the instance torunning
(default) orshutdown
. You can use this request to shut down and restart individual instances which use a persistent bootable storage volume. -
networking_info
- (Optional) Information pertaining to an individual network interface to be created and attached to the instance. If left unspecified, the instance will be created within theshared_network
. See Networking Info below for more information. -
storage
- (Optional) Information pertaining to an individual storage attachment to be created during instance creation. Please see Storage Attachments below for more information. -
reverse_dns
- (Optional) If set totrue
(default), then reverse DNS records are created. If set tofalse
, no reverse DNS records are created. -
ssh_keys
- (Optional) A list of the names of the SSH Keys that can be used to log into the instance. -
tags
- (Optional) A list of strings that should be supplied to the instance as tags.
» Attributes
During instance creation, there are several custom attributes that a user may wish to make available to the instance during instance creation.
These attributes can be specified via the instance_attributes
field, and must be presented as a string in JSON format.
The easiest way to populate this field is with a HEREDOC:
resource "opc_compute_instance" "foo" {
name = "test"
label = "test"
shape = "oc3"
imageList = "/oracle/public/oel_6.4_2GB_v1"
instance_attributes = <<JSON
{
"foo": "bar",
"baz": 42,
"my_obj": {
"my_key": false,
"another": true
}
}
JSON
sshKeys = ["${opc_compute_ssh_key.key1.name}"]
}
This allows the user to have full control over the attributes supplied to an instance during instance creation.
There are, as well, some attributes that get populated during instance creation, and the full attributes map can be seen
via the exported attributes
attribute.
Warning: Due to how Terraform imports resources, the instance_attributes
field will only be populated
when creating a new instance with terraform. This requires us to ignore any state diffs on changes to the instance_attributes
field.
Thus, any configuration changes in the instance_attributes
field, will not register a diff during a plan
or apply
.
If a user wishes to make a change solely to the supplied instance attributes, and recreate the instance resource, terraform taint
is the best solution.
You can read more about the taint
command here
» Networking Info
Each networking_info
config manages a single network interface for the instance.
The attributes are either required or optional depending on whether or not the interface is
in the Shared Network, or an IP Network. Some attributes can only be used if the interface is in the Shared
Network, and same for an interface in an IP Network.
Note: If networking_info
is left unspecified, the instance will be booted in the shared_network
.
The following attributes are supported:
-
index
- (Required) The numerical index of the network interface. Specified as an integer to allow for use ofcount
, but directly maps toethX
. ie: Withindex
set to0
, the interfaceeth0
will be created. Can only be0-9
. -
dns
- (Optional, IP Network Only) List of DNS A record names for the instance. You can specify up to eight DNS A record names for each interface on an IP network. These names can be queried by instances on any IP network in the same IP network exchange. -
ip_address
- (Optional, IP Network Only) IP Address assigned to the interface. -
ip_network
- (Optional, IP Network Only) The IP Network assigned to the interface. -
mac_address
- (Optional, IP Network Only) The MAC address of the interface. -
is_default_gateway
- (Optional, IP Network Only) Specify the interface is to be used as the default gateway for all traffic. Only one interface on an instance can be specified as the default gateway. If the instance has an interface on the shared network, that interface is always used as the default gateway. -
model
- (Optional, Shared Network Only) The model of the NIC card used. Must be set toe1000
. -
name_servers
- (Optional) Array of name servers for the interface. -
nat
- (Optional for IP Networks, Required for the Shared Network) The IP Reservations associated with the interface (IP Network). Indicates whether a temporary or permanent public IP address should be assigned to the instance (Shared Network). -
search_domains
- (Optional) The search domains that are sent through DHCP as option 119. -
sec_lists
- (Optional, Shared Network Only) The security lists the interface is added to. -
shared_network
- (Required) Whether or not the interface is inside the Shared Network or an IP Network. -
vnic
- (Optional, IP Network Only) The name of the vNIC created for the IP Network. -
vnic_sets
- (Optional, IP Network Only) The array of vNIC Sets the interface was added to.
» Storage Attachments
Each Storage Attachment config manages a single storage attachment that is created during instance creation.
This means that any storage attachments created during instance creation cannot be detached from the instance.
Use the resource_storage_attachment
resource to manage storage attachments for instances if you wish to detach the
storage volumes at a later date.
The following attributes are supported:
-
index
- (Required) The Index number of the volume attachment.1
is the boot volume for the instance. Values1-10
allowed. -
volume
- (Required) The name of the storage volume to attach to the instance.
In addition to the above attributes, the following attributes are exported for a storage volume
-
name
- Name of the storage volume attachment.
» Attributes Reference
In addition to the attributes listed above, the following attributes are exported:
-
id
- Theid
of the instance. -
attributes
- The full attributes of the instance, as a JSON string. -
availability_domain
- The availability domain the instance is in. -
domain
- The default domain to use for the hostname and for DNS lookups. -
entry
- Imagelist entry number. -
fingerprint
- SSH server fingerprint presented by the instance. -
fqdn
- The fully qualified domain name of the instance. -
image_format
- The format of the image. -
ip_address
- The IP Address of the instance. -
placement_requirements
- The array of placement requirements for the instance. -
platform
- The OS Platform of the instance. -
priority
- The priority at which the instance was ran. -
quota_reservation
- Reference to the QuotaReservation, to be destroyed with the instance. -
relationships
- The array of relationship specifications to be satisfied on instance placement. -
resolvers
- Array of resolvers to be used instead of the default resolvers. -
site
- The site the instance is running on. -
start_time
- The launch time of the instance. -
state
- The instance's state. -
vcable_id
- vCable ID for the instance. -
virtio
- Boolean that determines if the instance is a virtio device. -
vnc_address
- The VNC address and port of the instance.
» Import
Instances can be imported using the Instance's combined Name
and ID
with a /
character separating them.
If viewing an instance in the Oracle Web Console, the instance's name
and id
are the last two fields in the instances fully qualified Name
For example, in the Web Console an instance's fully qualified name is:
/Compute-<identify>/<user>@<account>/<instance_name>/<instance_id>
The instance can be imported as such:
$ terraform import opc_compute_instance.instance1 instance_name/instance_id
» Timeouts
opc_compute_instance
provides the following
Timeouts configuration options: