Managing Applications and Infrastructure with Terraform-Deploying Infrastructure with Terraform-(1)Terraform Basics and a Docker Deployment-(5)Terraform Console and Output
2018年10月04日
~/docker# terraform show
Provides an interactive console for evaluating expressions.
~/docker# terraform console
>
> docker_container.container_id.name
blog
> docker_container.container_id.ip_address
172.17.0.2
Ctrl+C
Output values are like the return values of a Terraform module.
Append lines into the "main.tf" file.
~/docker# vim main.tf
PS: In Terraform version 0.13, a name (e.g. output name) must start with a letter or underscore and may contain only letters, digits, underscores, and dashes. This is not an issue in Terraform version 0.11.
root@ip-172-31-18-169:/home/ubuntu/docker# terraform apply
root@ip-172-31-18-169:/home/ubuntu/docker# terraform destroy
References
Command: console
Output Values
Managing Applications and Infrastructure with Terraform-Deploying Infrastructure with Terraform
1. Terraform Basics and a Docker Deployment
5. Terraform Console and Output
In this post, we will look into a new Terraform configuration block called "outputs", and a new CLI, i.e. "terraform console".
~/docker# terraform apply
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
+ create
Terraform will perform the following actions:
# docker_container.container_id will be created
+ resource "docker_container" "container_id" {
+ attach = false
+ bridge = (known after apply)
+ command = (known after apply)
+ container_logs = (known after apply)
+ dns = (known after apply)
+ dns_opts = (known after apply)
+ entrypoint = (known after apply)
+ exit_code = (known after apply)
+ gateway = (known after apply)
+ hostname = (known after apply)
+ id = (known after apply)
+ image = (known after apply)
+ ip_address = (known after apply)
+ ip_prefix_length = (known after apply)
+ ipc_mode = (known after apply)
+ log_driver = (known after apply)
+ log_opts = (known after apply)
+ logs = false
+ must_run = true
+ name = "blog"
+ network_data = (known after apply)
+ read_only = false
+ restart = "no"
+ rm = false
+ shm_size = (known after apply)
+ start = true
+ user = (known after apply)
+ working_dir = (known after apply)
+ ports {
+ external = 80
+ internal = 2368
+ ip = "0.0.0.0"
+ protocol = "tcp"
}
}
# docker_image.image_id will be created
+ resource "docker_image" "image_id" {
+ id = (known after apply)
+ latest = (known after apply)
+ name = "ghost:latest"
}
Plan: 2 to add, 0 to change, 0 to destroy.
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
docker_image.image_id: Creating...
docker_image.image_id: Still creating... [10s elapsed]
docker_image.image_id: Still creating... [20s elapsed]
docker_image.image_id: Creation complete after 23s [id=sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest]
docker_container.container_id: Creating...
docker_container.container_id: Creation complete after 1s [id=0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3]
Apply complete! Resources: 2 added, 0 changed, 0 destroyed.
~/docker# terraform show
# docker_container.container_id:
resource "docker_container" "container_id" {
attach = false
command = [
"node",
"current/index.js",
]
cpu_shares = 0
dns = []
dns_opts = []
entrypoint = [
"docker-entrypoint.sh",
]
gateway = "172.17.0.1"
hostname = "0c5bcf3a7d38"
id = "0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3"
image = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5"
ip_address = "172.17.0.2"
ip_prefix_length = 16
ipc_mode = "private"
log_driver = "json-file"
log_opts = {}
logs = false
max_retry_count = 0
memory = 0
memory_swap = 0
must_run = true
name = "blog"
network_data = [
{
gateway = "172.17.0.1"
ip_address = "172.17.0.2"
ip_prefix_length = 16
network_name = "bridge"
},
]
network_mode = "default"
privileged = false
publish_all_ports = false
read_only = false
restart = "no"
rm = false
shm_size = 64
start = true
working_dir = "/var/lib/ghost"
ports {
external = 80
internal = 2368
ip = "0.0.0.0"
protocol = "tcp"
}
}
# docker_image.image_id:
resource "docker_image" "image_id" {
id = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest"
latest = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5"
name = "ghost:latest"
}
Provides an interactive console for evaluating expressions.
~/docker# terraform console
>
> docker_container.container_id.name
blog
> docker_container.container_id.ip_address
172.17.0.2
Ctrl+C
Output values are like the return values of a Terraform module.
Append lines into the "main.tf" file.
~/docker# vim main.tf
...
# Output name and ip address
output "IP_Address" {
value = docker_container.container_id.ip_address
}
output "container_name" {
value = docker_container.container_id.name
}
root@ip-172-31-18-169:/home/ubuntu/docker# terraform apply
docker_image.image_id: Refreshing state... [id=sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest] docker_container.container_id: Refreshing state... [id=0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3] An execution plan has been generated and is shown below. Resource actions are indicated with the following symbols: Terraform will perform the following actions: Plan: 0 to add, 0 to change, 0 to destroy. Changes to Outputs: + IP_Address = "172.17.0.2" + container_name = "blog" Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes Apply complete! Resources: 0 added, 0 changed, 0 destroyed. Outputs: IP_Address = 172.17.0.2 container_name = blog
root@ip-172-31-18-169:/home/ubuntu/docker# terraform destroy
docker_image.image_id: Refreshing state... [id=sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest]
docker_container.container_id: Refreshing state... [id=0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3]
An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
- destroy
Terraform will perform the following actions:
# docker_container.container_id will be destroyed
- resource "docker_container" "container_id" {
- attach = false -> null
- command = [
- "node",
- "current/index.js",
] -> null
- cpu_shares = 0 -> null
- dns = [] -> null
- dns_opts = [] -> null
- dns_search = [] -> null
- entrypoint = [
- "docker-entrypoint.sh",
] -> null
- gateway = "172.17.0.1" -> null
- group_add = [] -> null
- hostname = "0c5bcf3a7d38" -> null
- id = "0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3" -> null
- image = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5" -> null
- ip_address = "172.17.0.2" -> null
- ip_prefix_length = 16 -> null
- ipc_mode = "private" -> null
- links = [] -> null
- log_driver = "json-file" -> null
- log_opts = {} -> null
- logs = false -> null
- max_retry_count = 0 -> null
- memory = 0 -> null
- memory_swap = 0 -> null
- must_run = true -> null
- name = "blog" -> null
- network_data = [
- {
- gateway = "172.17.0.1"
- ip_address = "172.17.0.2"
- ip_prefix_length = 16
- network_name = "bridge"
},
] -> null
- network_mode = "default" -> null
- privileged = false -> null
- publish_all_ports = false -> null
- read_only = false -> null
- restart = "no" -> null
- rm = false -> null
- shm_size = 64 -> null
- start = true -> null
- sysctls = {} -> null
- tmpfs = {} -> null
- working_dir = "/var/lib/ghost" -> null
- ports {
- external = 80 -> null
- internal = 2368 -> null
- ip = "0.0.0.0" -> null
- protocol = "tcp" -> null
}
}
# docker_image.image_id will be destroyed
- resource "docker_image" "image_id" {
- id = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest" -> null
- latest = "sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5" -> null
- name = "ghost:latest" -> null
}
Plan: 0 to add, 0 to change, 2 to destroy.
Changes to Outputs:
- IP_Address = "172.17.0.2" -> null
- container_name = "blog" -> null
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
docker_container.container_id: Destroying... [id=0c5bcf3a7d38c094bd5a125752d845019b2b585de741ef5c284959b32edee4d3]
docker_container.container_id: Destruction complete after 1s
docker_image.image_id: Destroying... [id=sha256:98c65d66926b2da9fbb696d43aadfaf3fee847b7185e132e199532bc549aeba5ghost:latest]
docker_image.image_id: Destruction complete after 6s
Destroy complete! Resources: 2 destroyed.
References
Command: console
Output Values