Update
This commit is contained in:
116
09-modules-introduction/README.md
Normal file
116
09-modules-introduction/README.md
Normal file
@ -0,0 +1,116 @@
|
||||
%title: Terraform
|
||||
%author: Hubert
|
||||
|
||||
# Terraform : modules - introduction
|
||||
|
||||
<br>
|
||||
|
||||
* modules : regroupement de fichiers tf avec une cohérence en matière de resources
|
||||
|
||||
<br>
|
||||
|
||||
* module terraform = rôle ansible
|
||||
|
||||
<br>
|
||||
|
||||
* registry : https://registry.terraform.io/
|
||||
|
||||
<br>
|
||||
|
||||
* module = répertoire(s) + fichier(s) tf
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
# Terraform : modules - introduction
|
||||
|
||||
<br>
|
||||
|
||||
* utilisation d'un module
|
||||
```
|
||||
module "monmodule" {
|
||||
source = "./rep_module"
|
||||
}
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
* principe d'héritage du provider
|
||||
* par défaut celui du fichier dans lequel il est appelé
|
||||
* prossibilité de préciser le provider
|
||||
|
||||
<br>
|
||||
|
||||
* possiblité d'instancier plusieurs fois un même module
|
||||
```
|
||||
module "instance1" {
|
||||
source = "./rep_module"
|
||||
}
|
||||
module "instance2" {
|
||||
source = "./rep_module"
|
||||
}
|
||||
```
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
# Terraform : modules - introduction
|
||||
|
||||
<br>
|
||||
|
||||
* structure d'un module
|
||||
```
|
||||
├── README.md
|
||||
├── main.tf
|
||||
├── variables.tf
|
||||
├── outputs.tf
|
||||
```
|
||||
|
||||
* plus poussé
|
||||
|
||||
```
|
||||
├── README.md
|
||||
├── main.tf
|
||||
├── variables.tf
|
||||
├── outputs.tf
|
||||
├── ...
|
||||
├── modules/
|
||||
│ ├── nestedA/
|
||||
│ │ ├── README.md
|
||||
│ │ ├── variables.tf
|
||||
│ │ ├── main.tf
|
||||
│ │ ├── outputs.tf
|
||||
│ ├── nestedB/
|
||||
│ ├── .../
|
||||
├── examples/
|
||||
│ ├── exampleA/
|
||||
│ │ ├── main.tf
|
||||
│ ├── exampleB/
|
||||
│ ├── .../
|
||||
```
|
||||
|
||||
----------------------------------------------------------------------------
|
||||
|
||||
# Terraform : modules - introduction
|
||||
|
||||
<br>
|
||||
|
||||
* installation d'un module
|
||||
```
|
||||
terraform get
|
||||
terraform init
|
||||
```
|
||||
|
||||
<br>
|
||||
|
||||
* peut permettre de gérer la gestion de dépendances
|
||||
```
|
||||
terraform apply -target=module.docker
|
||||
terraform apply -target=module.postgres
|
||||
```
|
||||
|
||||
Remarque : ou via les variables
|
||||
|
||||
<br>
|
||||
|
||||
* problématique de la vidéo précédente
|
||||
|
||||
cf pb de dépendance d'installation de docker avant de jouer le provider docker
|
48
09-modules-introduction/main.tf
Normal file
48
09-modules-introduction/main.tf
Normal file
@ -0,0 +1,48 @@
|
||||
variable "ssh_host" {}
|
||||
variable "ssh_user" {}
|
||||
variable "ssh_key" {}
|
||||
resource "null_resource" "ssh_target" {
|
||||
connection {
|
||||
type = "ssh"
|
||||
user = var.ssh_user
|
||||
host = var.ssh_host
|
||||
private_key = file(var.ssh_key)
|
||||
}
|
||||
provisioner "remote-exec" {
|
||||
inline = [
|
||||
"sudo apt update -qq >/dev/null",
|
||||
"curl -fsSL https://get.docker.com -o get-docker.sh",
|
||||
"sudo chmod 755 get-docker.sh",
|
||||
"sudo ./get-docker.sh >/dev/null"
|
||||
]
|
||||
}
|
||||
provisioner "file" {
|
||||
source = "startup-options.conf"
|
||||
destination = "/tmp/startup-options.conf"
|
||||
}
|
||||
provisioner "remote-exec" {
|
||||
inline = [
|
||||
"sudo mkdir -p /etc/systemd/system/docker.service.d/",
|
||||
"sudo cp /tmp/startup-options.conf /etc/systemd/system/docker.service.d/startup_options.conf",
|
||||
"sudo systemctl daemon-reload",
|
||||
"sudo systemctl restart docker",
|
||||
"sudo usermod -aG docker vagrant"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
provider "docker" {
|
||||
host = "tcp://${var.ssh_host}:2375"
|
||||
}
|
||||
|
||||
resource "docker_image" "nginx" {
|
||||
name = "nginx:latest"
|
||||
}
|
||||
resource "docker_container" "nginx" {
|
||||
image = docker_image.nginx.latest
|
||||
name = "enginecks"
|
||||
ports {
|
||||
internal = 80
|
||||
external = 80
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user