diff options
| -rw-r--r-- | .gitignore | 6 | ||||
| -rw-r--r-- | README.md | 7 | ||||
| -rwxr-xr-x | createvm | 22 | ||||
| -rw-r--r-- | id_rsa.pub | 1 | ||||
| -rw-r--r-- | main.tf | 54 | ||||
| -rwxr-xr-x | set-hostname | 4 | ||||
| -rw-r--r-- | variables.tf | 13 |
7 files changed, 107 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0cc325e --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +terraform.tfstate +terraform.tfstate.backup +virtualbox.box +.terraform +.terraform.lock.hcl + diff --git a/README.md b/README.md new file mode 100644 index 0000000..a9ccb80 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Vbox_terraform - README + +## Pour installer terraform sur Linux : + + wget https://releases.hashicorp.com/terraform/1.2.9/terraform_1.2.9_linux_amd64.zip + unzip terraform_1.2.9_linux_amd64.zip + mv terraform /usr/local/bin diff --git a/createvm b/createvm new file mode 100755 index 0000000..509fd90 --- /dev/null +++ b/createvm @@ -0,0 +1,22 @@ +#!/bin/bash + +# Premier numero de la série +index=3 +# Nombre de machines +count=1 + +# Déploiment terraform +terraform init -reconfigure +terraform plan +terraform apply -var "nb=$count" -var "start=$index" -auto-approve + +sleep 5 + +# On copie notre clé publique et on met à jour le hostname des machines +for ((i=$index;i<$((index+count));i++));do +vm=ubuntu$i +vboxmanage guestcontrol $vm --username vagrant --password vagrant copyto id_rsa.pub /home/vagrant/.ssh/authorized_keys +vboxmanage guestcontrol $vm --username vagrant --password vagrant copyto set-hostname /home/vagrant/set-hostname +vboxmanage guestcontrol $vm --username vagrant --password vagrant run /usr/bin/bash /home/vagrant/set-hostname $vm +done + diff --git a/id_rsa.pub b/id_rsa.pub new file mode 100644 index 0000000..52824c0 --- /dev/null +++ b/id_rsa.pub @@ -0,0 +1 @@ +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQClwRlgv2C0slInlOALIuBrjOnnUzqPqvR9k6JUQks4ICPu61weOgYghAsfrna83mZUtBOc6nkhDAMRFdSCKUJDj1o6bPUNhk0LrCzw8irIm9MQD/kUOyQYASnRpz5hu/3eAUKuJD7P6+rK/QwtgsmNpDJlrtapWBNkPj3KqUrtJHJ49v1Vg6YycQ1mdc0b1ZL/j1YZfaSC2mDde7csgW0/Z6v3xyf4XEtsFGILJN8blCcIgjock+Ymb2g5FYUagcKfyGcqnM4mOYQGm2Sncu4+iGOY5qTMpjJ8Fx1JiDSy6yDOikltB9Plgu0Vl7ySuSd9KVjOszu6+Zn3VIwrRBJXEPuuRKPpH6ukKKDBt78Hy5q9on5xyVqBjAWQifqMLYunf9+QlK+nMUZsQxpVXPogyYYLteDRREf6zSTyCmMu9RFvUQxehsitY0iyslYgDW/cnpyWIdseVQE4rcV56KfrUJAUWHwQ7GzIdXI/ie/o2xTWYmSyD7XzYQrQEsP0YA0= formation@do-atos16 @@ -0,0 +1,54 @@ +terraform { + required_providers { + virtualbox = { + source = "terra-farm/virtualbox" + version = "0.2.2-alpha.1" + } + } +} + +resource "virtualbox_vm" "node" { +# count = 1 +# name = format("ubuntu%01d", count.index + 3) +# remplacement par des variables : voir variables.tf + count = var.nb + name = format("ubuntu%01d", count.index + var.start) + image = "https://app.vagrantup.com/ubuntu/boxes/focal64/versions/20220905.0.0/providers/virtualbox.box" + cpus = 2 + memory = "2048 mib" + + network_adapter { + type = "bridged" + host_interface = "ens160" + } +} + +output "ip_addresses" { + value = { + for vm in virtualbox_vm.node.*: + vm.name => vm.network_adapter.0.ipv4_address + } +} + +######################### +# Principales commandes # +######################### + +# pour valider notre script de configuration HCL +# -> terraform validate +# pour initaliser terraform (et le provider): +# -> terraform init +# pour voir ce qui va se passer : +# -> terraform plan +# pour appliquer le plan: +# -> terraform apply +# pour voir le déploiment réalisé +# -> terraform show +# ou encore +# -> terraform state list +# -> terraform state show virtualbox_vm.node[0] +# Pour retrouver les adresses ip à tout moment (voir bloc output plus haut): +# -> terraform output +# Pour supprimer les machines: +# -> terraform destroy + diff --git a/set-hostname b/set-hostname new file mode 100755 index 0000000..a445755 --- /dev/null +++ b/set-hostname @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +sudo hostnamectl set-hostname $1 +rm $0 + diff --git a/variables.tf b/variables.tf new file mode 100644 index 0000000..0c81311 --- /dev/null +++ b/variables.tf @@ -0,0 +1,13 @@ +# définition des variables + +variable "nb" { + description = "nombre de machines" + type = number + default = 1 +} + +variable "start" { + description = "premiere machine de la série" + type = number + default = 1 +} |
