Salut à tous,
Je fais face à un problème avec Terraform et j'aimerais avoir des conseils.
J'utilise Terraform pour déployer mes serveurs, mais je rencontre des difficultés lorsque je crée des serveurs avec uniquement des adresses IP privées (dans un vrack). Ces serveurs ne sont pas accessibles (ping) en privé tant qu'une adresse IP publique ne leur a pas été attribuée. Après attribution de l'adresse IP publique, je peux détacher l'adresse IP publique pour ne conserver que l'adresse IP privée.
Ma question est la suivante : quel est le moyen le plus simple d'automatiser cette action ?
De plus, il est important de noter que l'utilisation de local-exec va être dépréciée, ce qui signifie qu'il ne sera plus possible d'exécuter des commandes locales telles que :
nova interface-list {SERVER_ID} # Donne la liste des interfaces pour un serveur
nova interface-detach {SERVER_ID} {port_id} # Supprime une interface
Si quelqu'un a une idée ou des conseils, je suis preneur. Merci d'avance !
Je répond à ma propre question :
# les serveurs à détacher
variable "server_names_to_detach" {
type = list(string)
default = ["server_01", "server_03"]
}
# Image debian 12
data "openstack_images_image_v2" "debian" {
name = "Debian 12"
most_recent = true
}
# Capacité serveur – 2Vcore 4go de ram
data "openstack_compute_flavor_v2" "d2-4" {
name = "d2-4"
}
# Création d'une instance avec 2 interfaces réseau
resource "openstack_compute_instance_v2" "cluster_server_dev" {
count = length(var.instance_names)
name = var.instance_names[count.index] # Nom de l'instance
provider = openstack.ovh # Nom du fournisseur
image_name = data.openstack_images_image_v2.debian.name # Nom de l'image
flavor_name = data.openstack_compute_flavor_v2.d2-4.name # Nom du type d'instance
image_id = data.openstack_images_image_v2.debian.id # Identifiant de l'image de l'instance
security_groups = ["default"] # Ajoute l'instance au groupe de sécurité
# Nom de la ressource openstack_compute_keypair_v2 nommée test_keypair
key_pair = openstack_compute_keypair_v2.public_ssh_key.name
# interface publique
network {
name = "Ext-Net"
}
network {
# Nom de l'interface réseau privé
name = ovh_cloud_project_network_private.vrack.name
# Adresse IP prise depuis la liste définie précédemment
fixed_ip_v4 = element(var.instance_ips, count.index)
}
depends_on = [ovh_cloud_project_network_private_subnet.subnet] # Dépend du réseau privé
}
resource "null_resource" "detach_public_ip" {
count = length(var.server_names_to_detach)
triggers = {
server_name = var.server_names_to_detach[count.index]
}
# Détacher les ip publiques qui ne sont pas nécessaires
# (car avec ovh je suis obligé d'attribuer des adressess ip publiques et les enlever pour avoir accès aux serveurs)
# commande importante entre EOF
provisioner "local-exec" {
** # choix (cmd, powershell, git bash)
interpreter = ["bash", "-c"]
command = <<-EOF**
** openstack port list --server ${var.server_names_to_detach[count.index]} -c "Fixed IP Addresses" -c ID -c status | grep -v -E "ip_address='10.[0-9]+.[0-9]+.[0-9]+'" | grep "ACTIVE" | awk '{print $5}' | xargs -I {} openstack port delete {}
EOF**
** }**
# être sur que les instances sont créers pour lancer ce bloc
depends_on = [openstack_compute_instance_v2.cluster_server_dev]
}
dans le bloc provisioner je prend en compte les adresses qui ne commence pas par 10. donc pas une adresse ip privée
Bonjour @EnzoT2,
Je vous remercie d'avoir apporté la réponse à votre propre question !
Je vous souhaite une excellente journée et une bonne navigation sur notre espace communautaire.
^FabL