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